Java線程池

一、自定義線程池集成ThreadPoolExecutor

二、JDK自帶的幾種線程池

1、newFixedThreadPool

  newFixedThreadPool,創(chuàng)建固定大小的線程池,poolCoreSize和MaxPoolSize相等,到達coreSize則將新的任務放到緩存隊列,有線程執(zhí)行完畢,直接去取。
  創(chuàng)建一個定長線程池,可控制線程最大并發(fā)數(shù),超出的線程會在隊列中等待 。     

2、newSingleThreadExecutor

newSingleThreadExecutor,創(chuàng)建一個單線程的核心池,核心池的大小和最大池大小為1。
創(chuàng)建一個單線程化的線程池,它只會用唯一的工作線程來執(zhí)行任務,保證所有任務按照指定順序(FIFO, LIFO, 優(yōu)先級)執(zhí)行。示例代碼如下:
ExecutorService singleThreadExecutor = Executors.newSingleThreadExecutor();
for (int i = 0; i < 10; i++) {
final int index = i;
singleThreadExecutor.execute(new Runnable() {
 
@Override
public void run() {
try {
System.out.println(index);
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
}

結果依次輸出,相當于順序執(zhí)行各個任務。

3、newCacheThreadPool

 無大小限制的線程池,提交一個任務就創(chuàng)建一個線程執(zhí)行。
 創(chuàng)建一個可緩存線程池,如果線程池長度超過處理需要,可靈活回收空閑線程,若無可回收,則新建線程。線程池為無限大,當執(zhí)行第二個任務時第  一個任務已經完成,會復用執(zhí)行第一個任務的線程,而不用每次新建線程。

4.newScheduledThreadPool

創(chuàng)建一個定長線程池,支持定時及周期性任務執(zhí)行。
延遲執(zhí)行。
ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(5);
scheduledThreadPool.schedule(new Runnable() {
       @Override
        public void run() {
        System.out.println("delay 3 seconds");
  }
  }, 3, TimeUnit.SECONDS);
周期執(zhí)行
scheduledThreadPool.scheduleAtFixedRate(new Runnable() {
 
        @Override
        public void run() {
            System.out.println("delay 1 seconds, and excute every 3 seconds");
      }
      }, 1, 3, TimeUnit.SECONDS);

表示延遲1秒后每3秒執(zhí)行一次。
ScheduledExecutorService比Timer更安全,功能更強大。

【參考】https://www.cnblogs.com/zhujiabin/p/5404771.html

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 本篇文章講述Java中的線程池問題,同樣適用于Android中的線程池使用。本篇文章參考:Java線程池分析,Ja...
    Android進階與總結閱讀 871評論 0 5
  • 序言 近日后臺需要一些數(shù)據(jù),需要從網上爬取,但是爬取的過程中,由于訪問速度太頻繁,造成IP被封,最終通過線程池解決...
    非專業(yè)程序員閱讀 963評論 0 3
  • 本篇文章講述Java中的線程池問題,同樣適用于Android中的線程池使用。本篇文章參考:Java線程池分析,Ja...
    Ruheng閱讀 7,275評論 1 64
  • http://blog.csdn.net/evankaka/article/details/51489322 在線...
    ZhouWG閱讀 510評論 0 0
  • Java通過Executors提供四種線程池,分別為: newCachedThreadPool創(chuàng)建一個可緩存線程池...
    JaocbYu閱讀 415評論 0 0

友情鏈接更多精彩內容