开发者社区 问答 正文

对于Servlet doPost方法的阻塞疑问

很简单,看代码:

private Object lock = new Object();
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        System.out.println("start");
        synchronized(lock) {
            try {
                lock.wait(15000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            lock.notifyAll();
        }
    }

servlet地址配置为 /index
第一个request进来的时候打印 start, 并停在
lock.wait(15000)
这行。
第二个request进来的时候我觉得应该阻塞在
synchronized(lock)
但是测试发现竟然连doPost方法都没进来,被阻塞在了外面,当第一个request
lock.notifyAll();
后,第二个request才进来,打印 start.难道这就是tomcat处理方式??

展开
收起
落地花开啦 2016-03-26 10:42:31 2313 分享 版权
1 条回答
写回答
取消 提交回答
  • 喜欢技术,喜欢努力的人

    很有可能是jvm的锁粗化造成的,变更url后锁粗化条件不成立所以退回优化。

    2019-07-17 19:15:40
    赞同 展开评论