线程池内的线程是否需要销毁?

Posted mumian2

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了线程池内的线程是否需要销毁?相关的知识,希望对你有一定的参考价值。

结论:线程池管理的线程不用销毁,起到复用效果。使用Thread.currentThread().interrupt();好像也没有明显的效果。线程池的线程就像外包公司的员工一样,招进来了,即使没有活干也要有一个工号
技术图片
技术图片

package com.example.app10;

import org.springframework.stereotype.Component;

import java.io.IOException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

@Component
public class ThreadTool {

    private ExecutorService pool = Executors.newFixedThreadPool(10);

    public void saveWsRequest( ) {
        pool.execute(new ElasticsearchWsWritThread());
    }

    class ElasticsearchWsWritThread implements Runnable {

        public ElasticsearchWsWritThread( ) {

        }

        @Override
        public void run() {
            try {

                System.out.println(Thread.currentThread().getName()+"--"+System.currentTimeMillis());
                Thread.sleep(5000);
                //Thread.currentThread().interrupt();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }


    }





}


package com.example.app10;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;


@Controller
public class TestController {

    @Autowired
    private ThreadTool threadTool;
    @RequestMapping("test")
    public String start(){
        System.out.println();
        for(int i = 0; i<100;i++){
            threadTool.saveWsRequest();
        }
     return "test1243";
    }
}

技术图片
通过这个动画可以推测 newFixedThreadPool如果需要的线程数超出了线程池的大小就会产生等待。但是不知道会不会产生超时。我自己写的测试已经跑了十几分中了还在执行,没有报超时。

以上是关于线程池内的线程是否需要销毁?的主要内容,如果未能解决你的问题,请参考以下文章

java 如何获得线程池中正在执行的线程数?

高并发的epoll+线程池,业务在线程池内

线程池: 等待线程池内所有线程执行完毕后再继续任务

java线程只能被启动(Thread.start())一次,那么为啥线程池中的线程能被重复利用呢?

在 Openmp (C++) 中销毁线程

面试题: !=!=未看6