网站建设 事业单位 安全,网站备案更改需要多久,百度做网站的电话,wordpress 修改建站时间文章目录 Tomcat 接收请求并传递给工作线程池流程接收 socket 连接 org.apache.tomcat.util.net.SocketProcessorBase#reset结论 Tomcat 接收请求并传递给工作线程池流程
接收 socket 连接
有两个线程 http-nio-8080-ClientPoller-0/1 #xff08;下文称为 clientPoller下文称为 clientPoller一直在运行 org.apache.tomcat.util.net.NioEndpoint.Poller.run() 的 run 方法processKey(sk, attachment); 中attachment 即为 SelectionKey 中获取到的 socket org.apache.tomcat.util.net.AbstractEndpoint 持有 private Executor executor 是一个工作线程池的引用调用 其 executor.execute(sc); 即可将 socket 传递给工作线程池工作线程池 等待在阻塞队列 LinkedBlokingQueue 的 getTask :workQueue.take(); 方法当有任务后立即执行RMI 为前缀的线程 只是共用了 并发包的线程池 可能会影响debug在 org.apache.tomcat.util.net.SocketProcessorBase reset 方法中直接打断点可跟踪接收线程在 java.util.concurrent.ThreadPoolExecutor. runWorker 方法 task.run(); 打断点或业务代码打断点跟踪栈帧 可跟踪工作线程流程
org.apache.tomcat.util.net.SocketProcessorBase#reset public void reset(SocketWrapperBaseS socketWrapper, SocketEvent event) {Objects.requireNonNull(event);this.socketWrapper socketWrapper;this.event event;
}结论
两组 线程池传递数据使用的是 LinkedBlokingQueue