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

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

线程池的类型有哪些?

常见的线程池有FixedThreadPool、 SingleThreadExecutor 、CachedThreadPool和ScheduledThreadPool 。这几个都是 ExecutorService 线程池实例。

FixedThreadPool

固定线程数的线程池。任何时间点,最多只有 nThreads 个线程处于活动状态执行任务。

publicstaticExecutorServicenewFixedThreadPool(intnThreads) {
returnnewThreadPoolExecutor(nThreads, nThreads, 0L, TimeUnit.MILLISECONDS,
newLinkedBlockingQueue<Runnable>());
}

使用无界队列 LinkedBlockingQueue(队列容量为 Integer.MAX_VALUE),运行中的线程池不会拒绝 任务,即不会调用RejectedExecutionHandler.rejectedExecution()方法。

maxThreadPoolSize 是无效参数,故将它的值设置为与 coreThreadPoolSize 一致。

keepAliveTime 也是无效参数,设置为0L,因为此线程池里所有线程都是核心线程,核心线程不会被回 收(除非设置了executor.allowCoreThreadTimeOut(true))。

适用场景:适用于处理CPU密集型的任务,确保CPU在长期被工作线程使用的情况下,尽可能的少的分 配线程,即适用执行长期的任务。需要注意的是,FixedThreadPool 不会拒绝任务,在任务比较多的时 候会导致 OOM。

SingleThreadExecutor

只有一个线程的线程池。

publicstaticExecutionServicenewSingleThreadExecutor() {
returnnewThreadPoolExecutor(1, 1, 0L, TimeUnit.MILLISECONDS, newLinkedBlockingQueue<Runnable>());
}

使用无界队列 LinkedBlockingQueue。线程池只有一个运行的线程,新来的任务放入工作队列,线程处 理完任务就循环从队列里获取任务执行。保证顺序的执行各个任务。

适用场景:适用于串行执行任务的场景,一个任务一个任务地执行。在任务比较多的时候也是会导致OOM。

相关文章
|
5月前
|
算法 调度 人工智能
人工智能线程问题之无锁化编程如何解决
人工智能线程问题之无锁化编程如何解决
50 2
|
5月前
|
监控 Java 调度
Java面试题:描述Java线程池的概念、用途及常见的线程池类型。介绍一下Java中的线程池有哪些优缺点
Java面试题:描述Java线程池的概念、用途及常见的线程池类型。介绍一下Java中的线程池有哪些优缺点
76 1
|
7月前
|
存储 Java
Java 线程池作用及类型
线程池的优势、原理及参数解析 线程池解决了两个不同的问题: 1. 减少线程创建的开销,能提高执行大量异步任务的效率 2. 提供了一种限制和管理资源及线程的方法,并且还维护了一些基本的统计信息(如已完成的任务数) 线程池的使用对`new Thread()`的优势: 1. 复用存在的线程,减少对象创建、消亡的开销,性能佳。 2. 可有效控制最大并发线程数,提高系统资源的使用率,同时避免过多资源竞争,避免堵塞。 3. 提供定时执行、定期执行、单线程、并发数控制等功能。
|
缓存 Java
线程池的类型有哪些?适用场景?第二篇
线程池的类型有哪些?适用场景?第二篇
87 0
|
安全 Java 容器
并发编程-13线程安全策略之两种类型的同步容器
并发编程-13线程安全策略之两种类型的同步容器
80 0
|
缓存 安全 Java
并发编程-04线程安全性之原子性Atomic包的4种类型详解
并发编程-04线程安全性之原子性Atomic包的4种类型详解
61 0
|
物联网 Linux 开发者
线程的取消类型|学习笔记
快速学习线程的取消类型
线程的取消类型|学习笔记
|
存储 缓存 Java
【Java 并发编程】线程简介 ( 并发类型 | 线程状态 | CPU 数据缓存 )
【Java 并发编程】线程简介 ( 并发类型 | 线程状态 | CPU 数据缓存 )
157 0
【Java 并发编程】线程简介 ( 并发类型 | 线程状态 | CPU 数据缓存 )
|
2月前
|
存储 消息中间件 资源调度
C++ 多线程之初识多线程
这篇文章介绍了C++多线程的基本概念,包括进程和线程的定义、并发的实现方式,以及如何在C++中创建和管理线程,包括使用`std::thread`库、线程的join和detach方法,并通过示例代码展示了如何创建和使用多线程。
48 1
C++ 多线程之初识多线程