javasee 发表于 2013-2-7 05:43:01

Tomcat NIO源代码分析(一) -

当Tomcat配置成使用NIO时,启动过程其实和过去差不多,也是Connector#startInternal -> Protocol(Http11NioProtocol)#start() -> Endpoint(NioEndPoint)#start()的过程,这里主要看一下NioEndPoint:

<div style="border-left-color: #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; width: 98%; font-size: 13px;"> 1http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gifhttp://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif    public void start() throws Exception {
 2http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif        // 初始化
 3http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gifhttp://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif        if (!initialized) {
 4http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif            init();
 5http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif        }
 6http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gifhttp://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif        if (!running) {
 7http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif            running = true;
 8http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif            paused = false;
 9http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif
10http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif            // 创建一个ThreadPoolExecutor对象,和JDK里的功能一样,只不过进行了一些扩展
11http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gifhttp://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif            if (getExecutor() == null) {
12http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif                createExecutor();
13http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif            }
14http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif
15http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif            // 开启poll的线程
16http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif            pollers = new Poller;
17http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gifhttp://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif            for (int i = 0; i < pollers.length; i++) {
18http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif                pollers = new Poller();
19http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif                Thread pollerThread = new Thread(pollers, getName() + "-ClientPoller-" + i);
20http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif                pollerThread.setPriority(threadPriority);
21http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif                pollerThread.setDaemon(true);
22http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif                pollerThread.start();
23http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif            }
24http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif
25http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif            // 开启Acceptor的线程
26http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gifhttp://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif            for (int i = 0; i < acceptorThreadCount; i++) {
27http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif                Thread acceptorThread = new Thread(new Acceptor(), getName() + "-Acceptor-" + i);
28http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif                acceptorThread.setPriority(threadPriority);
29http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif                acceptorThread.setDaemon(getDaemon());
30http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif                acceptorThread.start();
31http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif            }
32http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif        }
33http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif    }
页: [1]
查看完整版本: Tomcat NIO源代码分析(一) -