美文网首页
tomcat 请求分析(1)处理线程的创建

tomcat 请求分析(1)处理线程的创建

作者: 不存在的里皮 | 来源:发表于2019-04-12 02:07 被阅读0次

    关于JIoEndpoint的线程创建的名字

    JIoJointPoint.startInternal创建AsyncTimeout线程:

    Thread timeoutThread = new Thread(new AsyncTimeout(),
        getName() + "-AsyncTimeout");
    

    当时比较疑惑getName里的name是在哪里设置的。一路跟踪才知道是在AbstractProtocol.init中调用的:

    String endpointName = getName(); // ""http-bio-8080"",注意这里是有双引号的。
    endpoint.setName(endpointName.substring(1, endpointName.length()-1)); // 把双引号去掉
    

    startAcceptorThreads线程数

    int count = getAcceptorThreadCount();
    

    跟踪代码发现,在AbstractProtocol.init中调用

    endpoint.init();
    

    然后调用AbstractEndpoint.init

    public final void init() throws Exception {
            testServerCipherSuitesOrderSupport();
            if (bindOnInit) {
                bind();
    ...
    

    进而调用JIoEndpoint的bind:

    @Override
        public void bind() throws Exception {
    
            // Initialize thread count defaults for acceptor
            if (acceptorThreadCount == 0) {
                acceptorThreadCount = 1;
            }
    ...
    

    在此设置为了1。

    总结

    原文方法

    @Override
    public void startInternal() throws Exception {
        if (!running) {
            ...
            startAcceptorThreads();
    
            // Start async timeout thread
            Thread timeoutThread = new Thread(new AsyncTimeout(),
                    getName() + "-AsyncTimeout");
            timeoutThread.setPriority(threadPriority);
            timeoutThread.setDaemon(true);
            timeoutThread.start();
        }
    }
    

    startAcceptorThreads();创建了Acceptor守护进程, 另外几行则创建了AsyncTimeout进程。
    总而言之: JIoEndpoint.start内会创建Acceptor和AsyncTimeout进程

    学习方法总结

    要多用idea的全文搜索"ctrl+shift+f"和类全文搜索"ctrl+shift+n"

    相关文章

      网友评论

          本文标题:tomcat 请求分析(1)处理线程的创建

          本文链接:https://www.haomeiwen.com/subject/hrfziqtx.html