一个request请求然后锁定等待异步接口处理结果
2024-10-20 21:12:40
private ConcurrentHashMap<String, Locker> relation = new ConcurrentHashMap<String, Locker>(); protected void doGet(HttpServletRequest request, final HttpServletResponse response) { final String id = request.getParameter("id"); if(null != id){ final Locker locker = relation.get(id); //此处的效率? if(locker == null){ Locker lock = new Locker(id, false); synchronized(lock){
try{
relation.put(id, lock);
System.out.println(id + "开始等待,relation.size() = " + relation.size());
lock.wait(5000l); //设置超时时间
HttpClientUtil.httpGetRequest("http://localhost:8080/Test/BusiServlet?id=" + 2);
System.out.println(id + "同步处理完成,relation.size() = " + relation.size());
}catch(InterruptedException e){
e.printStackTrace();
}
} try{
response.serHeader("content-type", "text/html;charset=utf-8");
if(relation.containsKey(id)){
response.getOutputStream().write(("失败...." + id).getBytes("utf-8"));
} else {
response.getOutputStream().write(("成功...." + id).getBytes("utf-8"));
}
}catch(IOException e){
e.printStackTrace();
} } else {
//此处需要加锁?
synchronized(locker){
try{
locker.notify();
}catch(Exception e){
e.printStackTrace();
}
relation.remove(id);
} } } } class Locker{ String id;
boolean dir; //Getter and Setter }
最新文章
- Python中的多进程与多线程(一)
- js模块定义——支持CMD&;AMD&;直接加载
- 认识DOM和一些方法
- 刚看到的感觉会用的到 收藏一下 常用的iOS第三方资源 (转)
- 小程序基础09:视图层之WXML
- sql server 还原数据库时提示数据库正在使用,无法进行操作的解决方法
- tmux使用
- MVC5入门学习系列④
- electron 学习笔记
- 假设检验(Hypothesis Testing)
- CentOS7下安装GitLab
- bugku web 头等舱
- Django + Uwsgi + Nginx 实现生产环境部署
- 解决pycharm启动慢
- 使用WebSocket帮助应用程序群集节点间通信
- GreenDao-自定义SQL查询-拼接多个查询条件-AndroidStudio
- Android 混淆打包
- Python类,特殊方法, __getitem__,__len__, __delitem__
- js改变下拉框内容
- 拿与不拿的dfs