文章目录
 - Tomcat 接收请求并传递给工作线程池流程
 -  
 - org.apache.tomcat.util.net.SocketProcessorBase#reset
 - 结论
 
 
  
 
 
Tomcat 接收请求并传递给工作线程池流程
 
接收 socket 连接
 
- 有两个线程 
http-nio-8080-ClientPoller-0/1 (下文称为 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(SocketWrapperBase<S> socketWrapper, SocketEvent event) {Objects.requireNonNull(event);this.socketWrapper = socketWrapper;this.event = event;
}
 
结论
 
- 两组 线程池传递数据,使用的是 LinkedBlokingQueue;