gpt4 book ai didi

java - 为什么此 Servlet 在其 "Thread Per Connection"策略中使用多个线程?

转载 作者:行者123 更新时间:2023-12-01 10:18:43 26 4
gpt4 key购买 nike

前提:这个问题与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)

最佳答案

Chrome 浏览器为每个选项卡创建一个新进程。它将创建从每个选项卡到 servlet 的新 TCP 连接。您可以通过在 servlet 代码中打印客户端端口来验证这一点。

由于您有 3 个 TCP 连接,并且使用每个连接一个线程策略进行 Wildfly,因此您将看到预期的结果。每个连接一个线程:)

关于java - 为什么此 Servlet 在其 "Thread Per Connection"策略中使用多个线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35755477/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com