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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章