JUC源码解析(4)----线程池之 newSingleThreadExecutor()

可以通过调用Executors类的static newSingleThreadExecutor()方法获得单个线程池。

语法

ExecutorService executor = Executors.newSingleThreadExecutor();

Java

newSingleThreadExecutor()方法创建一次执行单个任务的执行程序。

创建一个单线程的线程池。这个线程池只有一个线程在工作,也就是相当于单线程串行执行所有任务。如果这个唯一的线程因为异常结束,那么会有一个新的线程来替代它。此线程池保证所有任务的执行顺序按照任务的提交顺序执行。内部使用LinkedBlockingQueue作为阻塞队列。

从参数可以看出来,SingleThreadExecutor 相当于特殊的 FixedThreadPool,它的执行流程如下:

  1. 如果当前运行的线程数少于 corePoolSize (即线程池中无运行的线程),则创建一个新线程来执行任务。
  2. 当前线程池中有一个运行的线程以后,将任务加入阻塞队列(LinkedBlockingQueue)。
  3. 线程执行完创建新线程任务后,会在一个无限循环中反复从 LinkedBlockingQueue 获取任务来执行。

SingleThreadExecutor 用于串行执行任务的场景,每个任务必须按顺序执行,不需要并发执行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值