SingleThreadExecutor
是使用
单
个
worker
线
程的
Executor
。下面是
SingleThreadExecutor
的源
代 码实现 。
FixedThreadPool 相同。 SingleThreadExecutor 使用无界 队 列 LinkedBlockingQueue 作 为线 程池的工
作 队 列( 队 列的容量 为 Integer.MAX_VALUE )。 SingleThreadExecutor 使用无界 队 列作 为 工作 队 列
对线 程池 带 来的影响与 FixedThreadPool 相同
SingleThreadExecutor 的运行示意 图 如 图
代 码实现 。
public static ExecutorService newSingleThreadExecutor() {
return new FinalizableDelegatedExecutorService
(new ThreadPoolExecutor(1, 1,
0L, TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<Runnable>()));
}
SingleThreadExecutor
的
corePoolSize
和
maximumPoolSize
被
设
置
为
1
。其他参数与FixedThreadPool 相同。 SingleThreadExecutor 使用无界 队 列 LinkedBlockingQueue 作 为线 程池的工
作 队 列( 队 列的容量 为 Integer.MAX_VALUE )。 SingleThreadExecutor 使用无界 队 列作 为 工作 队 列
对线 程池 带 来的影响与 FixedThreadPool 相同
SingleThreadExecutor 的运行示意 图 如 图
1)如果当前运行的线程数少于corePoolSize(即线程池中无运行的线程),则创建一个新线
程来执行任务。
2)在线程池完成预热之后(当前线程池中有一个运行的线程),将任务加入LinkedBlockingQueue。
3)线程执行完1中的任务后,会在一个无限循环中反复从LinkedBlockingQueue获取任务来
执行。