线程池之 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();
    }
}

 

 

posted @ 2020-12-03 17:31  送外卖的小菜鸟  阅读(8019)  评论(1编辑  收藏  举报