3.1.FixedThreadPool:他是可重用固定线程数的线程池,他的主要特点如下:
- 只有核心线程,没有非核心线程,并且数量是固定的,keepAliveTime设置为0意味着多余的线程会被立即终止,因此不会产生多余的线程,采用了无界阻塞队列LinkedBlockingQueue 。
- 当执行execute方法时:如果当前运行的线程数未达到核心线程数,则创建一个新线程来处理任务,如果运行线程数等于核心线程数,则将任务添加到阻塞队列中,FixThread就是拥有固定数量核心线程的线程池,并且这些核心线程不会被回收,当线程池中有空闲线程就会去任务队列取任务

文章插图
4.CacheThreadPool
4.1.CacheThreadPool:他是一个根据需要创建线程的线程池,他的主要特点如下:
- CacheThreadPool的corePoolSize为0,maximumPoolSize设置为最大值,他没有核心线程,非核心线程是无界的,keepAliveTime设置为60s,并使用了阻塞队列SynchronousQueue,他是一个不存储元素的阻塞队列,每个插入操作必须要等待另外一个线程的移除操作,同样一个移除操作也需要等待插入操作 。

文章插图
- 当执行execute方法时:首先会执行synchroniusQueue的offer方法来提交任务,并且查询线程池中是否有空闲的线程执行SynchronousQueue的poll方法来移除任务,如果有则配对成功,将任务交给这个线程去处理,如果没有则配对失败,创建新的线程去执行任务当线程池中的线程空闲时,他会执行SynchronusQueue的poll方法,等待synchronoudQueue提交的新任务,如果60s没有新任务提交到synchronousQueue,则这个线程就会终止 。cacheThreadPool适合大量需要立即处理并且耗时少的任务 。
- SingleThreadExecutor:他是使用单个工作线程的线程池,corePoolSize和maximumPoolSize都为1,意味着SingleThreadExecutor只有一个核心线程,其他核心参数都和FixThreadPool一样,SingleThreadExecutor执行execute方法时,如果当前运行的线程数未达到核心线程数,也就是当前没有运行的线程,则创建一个新线程来处理任务,如果当前有运行的线程,则将任务添加到阻塞队列中,因此SingleThreadExecutor能确保所有的任务都在一个线程中按照顺序逐一执行

文章插图
最后如果你看到了这里,觉得文章写得不错就给个赞呗!欢迎大家评论讨论!如果你觉得那里值得改进的,请给我留言 。一定会认真查询,修正不足,定期免费分享技术干货 。喜欢的小伙伴可以关注一下哦 。谢谢!
推荐阅读
- 深扒七大自媒体平台:哪个吸引流量多,哪个赚钱最容易?
- 如何控制Java多线程分布到不同的CPU核上去?
- 富贵包能不能打溶脂针 富贵包吸脂后多久有效果
- 开淘宝店卖虚拟产品需要多少钱 开虚拟网店需要多少钱
- 微软|在微软搞黄的70多个项目里 竟然还有个厕所
- 幽门螺旋杆菌为什么是致癌物,幽门螺旋杆菌致癌物有多可怕
- 为什么女生剪短发发尾会翘,女生剪短发翘多久会恢复
- 2022东莞回南天一般在几月份,东莞回南天一般持续多久
- 淘宝开店一年赚多少钱 现在开淘宝店一年可以赚多少
- 世界上存活最久的物种 世界上已经灭绝的生物有多少种
