线程池和任务队列那点事

在高并发环境中,线程池通过减少线程创建和销毁带来的资源损耗,提高了系统效率。本文作者分享了学习线程池的经历,探讨了线程与线程池的关系,以及四种常见的线程池创建方式:单线程、固定大小、自适应大小和延时任务。特别指出,自适应大小线程池在空闲时可能会导致线程快速销毁,反而增加资源开销,而固定大小线程池通常建议设置为与CPU内核数相等以提高并行执行效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.学习经历       

        在高并发编程中,线程的创建和销毁对资源的消耗很大,为了降低资源消耗和更好的管理线程,有了线程池,阅读了不少资料后,从中恍惚理解了线程池大概的工作原理,并从学习过程中了解了阻塞队列和生产消费模式的大概原理。

        但是看了不少的博客发现文字很多也难于理解,对一个知识点也是有不同的说法难于理解,而且在看的过程中老是遇到自己理解的不了的某个知识点或没学过的知识,又得去查找这个只是知识点,然后回过头来再看这块知识,很是难搞,于是乎我就画一个将自己理解的东西和学到的东西总结出来,这样可以帮助到同志们先将原理了解,至于如何实现那个步骤的知识点就看同志们的求知欲了,可以查看源码(我看源码的时候是从清醒到懵的状态,而且越debug越多)或者另行查看其它博主的文章(都很不错QWQ),接下来看图(总结不到或者总结有问题的希望同志们理解,画图不易)

1.线程和线程池

 2.创建过程

 

二.常用创建过程

        刚开始学习的时候,遇到了好几个创建线程池的方式,有单线程创建方式,固定大小线程池创建方式,自适应大小创建模式和延时任务创建方式,这4种创建方式。

  • 对于单线程创建方式没有指定大小,
    ExecutorService executorService = Executors.newSingleThreadExecutor();
  • 固定大小线程池的创建
    ExecutorService threadPool = Executors.newFixedThreadPool(n);
    //创建一个核心线程数和最大线程数都为n的线程池
  • 自适应大小线程池的创建
    ExecutorService executorService  = Executors.newCachedThreadPool();
    //创建一个核心数量为0,最大数量为Integer.MAX_VALUE的线程池
  • 延时任务线程池的创建
    ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(8);

        就客观来说,自适应大小线程池创建的是一个核心线程数为0的线程池,就意味着在空闲的时候(超时处理之后)线程池中的线程数是0,那就说明就没有可复用的,用完的线程如果不及时在超时范围内尽快使用就会立即销毁,这么一来不是本末倒置了嘛,本来是为了降低对资源的消耗,你这一进一出又给干没了,所以听起来是自适应的线程池,只是最大数量很大,对于对核心线程的处理几乎没有,这也意味着在真正使用中很少使用自适应大小线程池。

        对于固定大小的线程池的创建最好让其大小等于电脑内核数,并行执行的效率高。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值