前提:这个问题与previous longer one有关,我认为最好发布一个新的简短问题,而不是让另一个问题更长。我已经阅读了this,this,this,this和其他许多人,但他们没有帮助。我的问题与其中任何一个都不重复,请不要投票结束,如果不感兴趣,请不要回答。
我在servlet中有这个doGet()
方法
protected void doGet(/*params*/)/*exceptions*/{
System.out.print("Thread:"+Thread.currentThread().getName()+" ");
System.out.print("Session:"+request.getSession().getId()+" ");
System.out.println("start...");
try {Thread.sleep(4000);}
catch (InterruptedException e) {}
System.out.print("Thread:"+Thread.currentThread().getName()+" ");
System.out.print("Session:"+request.getSession().getId()+" ");
System.out.println("...end");
}
当我从同一个浏览器的3个选项卡(几乎)同时调用servlet时,这是我的输出
18:09:17,080 [...] Thread:default task-15 Session:_5axg3aG4vaOf-5qxWJ5TWYk start...
18:09:21,081 [...] Thread:default task-15 Session:_5axg3aG4vaOf-5qxWJ5TWYk ...end
18:09:21,088 [...] Thread:default task-16 Session:KYQf66vtc4ezaUD1vrGIMQje start...
18:09:25,090 [...] Thread:default task-16 Session:KYQf66vtc4ezaUD1vrGIMQje ...end
18:09:25,101 [...] Thread:default task-17 Session:wyViZoHMGL1Mb8f9BCXO8aJK start...
18:09:29,102 [...] Thread:default task-17 Session:wyViZoHMGL1Mb8f9BCXO8aJK ...end
我的理解是3个请求是按顺序处理的,因为客户端对多个请求使用相同的连接,并且服务器使用每个连接的线程策略。
但似乎每次都使用不同的线程(15,16和17)。为什么会这样?我错了什么? (Wildfly 8 + Chrome)
答案 0 :(得分:1)
Chrome会为每个标签创建一个新流程。它将从每个选项卡到servlet创建一个新的TCP连接。您可以通过在servlet代码中打印客户端端口来验证这一点。
由于您有3个TCP连接,并且带有每个连接的线程策略的wildfly,您正在目睹预期的结果。每个连接一个线程:)