可以通过调用Executors
类的static newSingleThreadExecutor()
方法获得单个线程池。
语法
ExecutorService executor = Executors.newSingleThreadExecutor();
Java
newSingleThreadExecutor()
方法创建一次执行单个任务的执行程序。
创建一个单线程的线程池。这个线程池只有一个线程在工作,也就是相当于单线程串行执行所有任务。如果这个唯一的线程因为异常结束,那么会有一个新的线程来替代它。此线程池保证所有任务的执行顺序按照任务的提交顺序执行。内部使用LinkedBlockingQueue作为阻塞队列。
从参数可以看出来,SingleThreadExecutor
相当于特殊的 FixedThreadPool
,它的执行流程如下:
- 如果当前运行的线程数少于 corePoolSize (即线程池中无运行的线程),则创建一个新线程来执行任务。
- 当前线程池中有一个运行的线程以后,将任务加入阻塞队列(LinkedBlockingQueue)。
- 线程执行完创建新线程任务后,会在一个无限循环中反复从 LinkedBlockingQueue 获取任务来执行。
SingleThreadExecutor
用于串行执行任务的场景,每个任务必须按顺序执行,不需要并发执行。