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

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM