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(); } }