天天看點

JAVA 并發程式設計 線程池

1、 Single Thread Executor : 隻有一個線程的線程池,是以所有送出的任務是順序執行,

代碼: Executors.newSingleThreadExecutor()

2、 Cached Thread Pool : 線程池裡有很多線程需要同時執行,老的可用線程将被新的任務觸發重新執行,如果線程超過60秒内沒執行,那麼将被終止并從池中删除,

代碼:Executors.newCachedThreadPool()

3、 Fixed Thread Pool : 擁有固定線程數的線程池,如果沒有任務執行,那麼線程會一直等待,

代碼: Executors.newFixedThreadPool(4)

在構造函數中的參數4是線程池的大小,你可以随意設定,也可以和cpu的核數量保持一緻,擷取cpu的核數量int cpuNums = Runtime.getRuntime().availableProcessors();

4、 Scheduled Thread Pool : 用來排程即将執行的任務的線程池,可能是不是直接執行, 每隔多久執行一次… 政策型的

代碼:Executors.newScheduledThreadPool()

5、 Single Thread Scheduled Pool : 隻有一個線程,用來排程任務在指定時間執行,代碼:Executors.newSingleThreadScheduledExecutor()

• FixedThreadPool:定長線程池,送出任務時建立線程,直到池的最大容量,如果有線程非預期結束,會補充新線程

• CachedThreadPool:可變線程池,它猶如一個彈簧,如果沒有任務需求時,它回收空閑線程,如果需求增加,則按需增加線程,不對池的大小做限制

• SingleThreadExecutor:單線程。處理不過來的任務會進入FIFO隊列等待執行

• SecheduledThreadPool:周期性線程池。支援執行周期性線程任務

其實,這些不同類型的線程池都是通過建構一個ThreadPoolExecutor來完成的,所不同的是corePoolSize,maximumPoolSize,keepAliveTime,unit,workQueue,threadFactory這麼幾個參數。具體可以參見JDK DOC。

https://github.com/itning/BigData/tree/master/src/main/java/top/itning/concurrent