线程池CachedThreadPool

创建 CachedThreadPool

自动创建但不用传参

ExecutorService ThreadPool = Executors.newCachedThreadPool();

分析一下它的源码,看里面是怎么创建 CachedThreadPool的

 public static ExecutorService newCachedThreadPool() {
        return new ThreadPoolExecutor(0, Integer.MAX_VALUE,
                                      60L, TimeUnit.SECONDS,
                                      new SynchronousQueue<Runnable>());
    }
  • 第一个参数位置,corePoolSize为0,即每次线程池空闲的时候,都会把线程池中的所有线程销毁
  • 第二个参数位置,maximumPoolSize,最大可创建线程的数量是Integer.MAX_VALUE,理论上可以达到的个数,但实际上嘛,没见过
  • 第三个参数位置,KeepAliveTime,线程池空闲的时候,检测线程是不是空闲了 60秒,如果是就销毁线程
  • 第四个参数位置,Unit,也就是 KeepAliveTime的时间单位,也就是秒
  • 第五个参数位置,阻塞队列,SynchronousQueue,不存储任何任务,因为这个线程池理论可以创建Integer.MAX_VALUE个线程,也就是你过来,我就创建个线程去处理任务

测试 CachedThreadPool

public class TestCachedThreadPool {

    public static void main(String[] args) {
        ExecutorService threadPool = Executors.newCachedThreadPool();


        Thread thread = new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println(Thread.currentThread().getName() + "运行了!!");
                try {
                    Thread.sleep(500);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        });

        for (int i = 0; i < 50; ++i) {
            threadPool.submit(thread);
        }

        threadPool.shutdown();
    }
}

在这里插入图片描述
好像还真是来一个任务,我创建一个线程去执行

从上面可以得知,CachedThreadPool是一个无上限创建线程的线程池,它的阻塞队列为 SynchronousQueue,它的核心线程数为0,它的 KeepAliveTime为60

与 FixedThreadPool有点相反,FixedThreadPool 创建的线程数是有限的,但它的 阻塞队列可以无上限存放任务


欢迎大家关注下个人的「公众号」:独醉贪欢

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值