zoukankan      html  css  js  c++  java
  • 一个request请求然后锁定等待异步接口处理结果

    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
    
    }
  • 相关阅读:
    dblink
    linux 查进程、杀进程、起进程
    oracle 资源统计SQL语句
    DIV+CSS+javascript 手动轮播图
    接受同步数据接口
    java String StringBuffer StringBuilder
    SpringMVC Servlet 分页查询接收参数
    WPF 开发
    收集整理的各地精品青年旅舍大全(
    Linux平台Java调用so库JNI使用例子
  • 原文地址:https://www.cnblogs.com/xinxindiandeng/p/6381961.html
Copyright © 2011-2022 走看看