线程池之 newSingleThreadExecutor 介绍
package com.aaa.threaddemo; import java.text.DateFormatSymbols; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import com.sun.org.apache.regexp.internal.recompile; import sun.misc.Signal; /* * newSingleThreadExecutor 是啥? * 这个线程池只有一个线程 * newSingleThreadExecutor() 方法可以创建一次执行单个任务的执行程序 * 当线程出现异常,它会重新创建一个线程代替挂掉的线程。 * * 使用场景? * 任务需要按照顺序执行 【串行处理任务】 * * * 源码 * public static ExecutorService newSingleThreadExecutor() { return new FinalizableDelegatedExecutorService (new ThreadPoolExecutor( 1, 核心线程数和非核心 都是1 1, 0L, 非核心生存的时间是 0 TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>() 用的是一个链表的阻塞队列 )); } 分析源码可以看出,它有些类似于 newFixedThreadPool, 可以把它当作特殊的 newFixedThreadPool。 * * * */ public class SingleThreadDemo { public static void main(String[] args) throws InterruptedException { // 创建一个单线程的线程池 ExecutorService single = Executors.newSingleThreadExecutor(); for (int i = 0; i < 3; i++) { single.execute( new Runnable() { public void run() { System.out.println(111); System.out.println("执行线程名字" + Thread.currentThread().getName()); } }); } single.shutdown(); } }