线程池的类型有哪些?适用场景?第二篇

简介: 线程池的类型有哪些?适用场景?第二篇

CachedThreadPool

根据需要创建新线程的线程池。

publicstaticExecutorServicenewCachedThreadPool() {
returnnewThreadPoolExecutor(0, Integer.MAX_VALUE, 60L, TimeUnit.SECONDS,
newSynchronousQueue<Runnable>());
}

如果主线程提交任务的速度高于线程处理任务的速度时, CachedThreadPool 会不断创建新的线程。极 端情况下,这样会导致耗尽 cpu 和内存资源。

使用没有容量的SynchronousQueue作为线程池工作队列,当线程池有空闲线程时, SynchronousQueue.offer(Runnable task) 提交的任务会被空闲线程处理,否则会创建新的线程处理任务。

适用场景:用于并发执行大量短期的小任务。

CachedThreadPool 允许创建的线程数量Integer.MAX_VALUE ,可能会创建大量线程,从而导致 OOM。

ScheduledThreadPoolExecutor

在给定的延迟后运行任务,或者定期执行任务。在实际项目中基本不会被用到,因为有其他方案选择比如 quartz 。

使用的任务队列 DelayQueue 封装了一个 PriorityQueue , PriorityQueue 会对队列中的任务进行 排序,时间早的任务先被执行(即 ScheduledFutureTask 的 time 变量小的先执行),如果time相同则 先提交的任务会被先执行( ScheduledFutureTask 的 squenceNumber 变量小的先执行)。

执行周期任务步骤:

1. 线程从 DelayQueue 中获取已到期的 ScheduledFutureTask(DelayQueue.take()) 。到期任 务是指 ScheduledFutureTask 的 time 大于等于当前系统的时间;

2. 执行这个 ScheduledFutureTask ;

3. 修改 ScheduledFutureTask 的 time 变量为下次将要被执行的时间;

4. 把这个修改 time 之后的 ScheduledFutureTask 放回 DelayQueue 中( DelayQueue.add() )。

image.png

适用场景:周期性执行任务的场景,需要限制线程数量的场景。

总结-java中常用的线程池类

1. newFixedThreadPool:创建一个可重用固定线程数的线程池,以共享的无界队列方式来运行这些线程,线程池中的线程处于一定的量,可以很好的控制线程的并发量

2. newSingleThreadExecutor:创建一个使用单个 worker 线程的Executor ,以无界队列方式来运行 该线程。线程池中最多执行一个线程,之后提交的线程将会排在队列中亿次执行

3. newCachedThreadPool:创建一个可进行缓存重复利用的线程池

4.  newScheduledThreadPool:创建一个线程池,它可安排在给定延迟后运行命令或者定期的执行

相关文章
|
9月前
|
存储 监控 Java
JAVA线程池有哪些队列? 以及它们的适用场景案例
不同的线程池队列有着各自的特点和适用场景,在实际使用线程池时,需要根据具体的业务需求、系统资源状况以及对任务执行顺序、响应时间等方面的要求,合理选择相应的队列来构建线程池,以实现高效的任务处理。
354 12
|
算法 调度 人工智能
人工智能线程问题之无锁化编程如何解决
人工智能线程问题之无锁化编程如何解决
117 2
|
监控 Java 调度
Java面试题:描述Java线程池的概念、用途及常见的线程池类型。介绍一下Java中的线程池有哪些优缺点
Java面试题:描述Java线程池的概念、用途及常见的线程池类型。介绍一下Java中的线程池有哪些优缺点
221 1
|
Java 调度 Python
线程池在Python中的优势及适用场景
线程池在Python中的优势及适用场景
|
存储 Java
Java 线程池作用及类型
线程池的优势、原理及参数解析 线程池解决了两个不同的问题: 1. 减少线程创建的开销,能提高执行大量异步任务的效率 2. 提供了一种限制和管理资源及线程的方法,并且还维护了一些基本的统计信息(如已完成的任务数) 线程池的使用对`new Thread()`的优势: 1. 复用存在的线程,减少对象创建、消亡的开销,性能佳。 2. 可有效控制最大并发线程数,提高系统资源的使用率,同时避免过多资源竞争,避免堵塞。 3. 提供定时执行、定期执行、单线程、并发数控制等功能。
|
Java
线程池的类型有哪些?适用场景?第一篇
线程池的类型有哪些?适用场景?第一篇
346 0
|
安全 Java 容器
并发编程-13线程安全策略之两种类型的同步容器
并发编程-13线程安全策略之两种类型的同步容器
136 0
|
缓存 安全 Java
并发编程-04线程安全性之原子性Atomic包的4种类型详解
并发编程-04线程安全性之原子性Atomic包的4种类型详解
116 0
|
物联网 Linux 开发者
线程的取消类型|学习笔记
快速学习线程的取消类型
线程的取消类型|学习笔记
|
3月前
|
安全 算法 Java
Java 多线程:线程安全与同步控制的深度解析
本文介绍了 Java 多线程开发的关键技术,涵盖线程的创建与启动、线程安全问题及其解决方案,包括 synchronized 关键字、原子类和线程间通信机制。通过示例代码讲解了多线程编程中的常见问题与优化方法,帮助开发者提升程序性能与稳定性。
142 0