中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java中四種線程池的使用示例詳解

發布時間:2020-09-18 12:30:01 來源:腳本之家 閱讀:143 作者:andy_hu 欄目:編程語言

在什么情況下使用線程池?

1.單個任務處理的時間比較短

2.將需處理的任務的數量大

使用線程池的好處:

1.減少在創建和銷毀線程上所花的時間以及系統資源的開銷

2.如不使用線程池,有可能造成系統創建大量線程而導致消耗完系統內存以及”過度切換”。

本文詳細的給大家介紹了關于Java中四種線程池的使用,分享出來供大家參考學習,下面話不多說了,來一起看看詳細的介紹:

FixedThreadPool

由Executors的newFixedThreadPool方法創建。它是一種線程數量固定的線程池,當線程處于空閑狀態時,他們并不會被回收,除非線程池被關閉。當所有的線程都處于活動狀態時,新的任務都會處于等待狀態,直到有線程空閑出來。FixedThreadPool只有核心線程,且該核心線程都不會被回收,這意味著它可以更快地響應外界的請求。

FixedThreadPool沒有額外線程,只存在核心線程,而且核心線程沒有超時機制,而且任務隊列沒有長度的限制。

public class ThreadPoolExecutorTest {
 public static void main(String[] args) {
 ExecutorService fixedThreadPool =Executors. newFixedThreadPool(3);
  for (int i =1; i<=5;i++){
  final int index=i ;
  fixedThreadPool.execute(new Runnable(){
   @Override
   public void run() {
   try {
   System.out.println("第" +index + "個線程" +Thread.currentThread().getName());
   Thread.sleep(1000);
   } catch(InterruptedException e ) {
    e .printStackTrace();
   }
  }
 
  });
 }
 }
}

CachedThreadPool

由Executors的newCachedThreadPool方法創建,不存在核心線程,只存在數量不定的非核心線程,而且其數量最大值為Integer.MAX_VALUE。當線程池中的線程都處于活動時(全滿),線程池會創建新的線程來處理新的任務,否則就會利用新的線程來處理新的任務,線程池中的空閑線程都有超時機制,默認超時時長為60s,超過60s的空閑線程就會被回收。和FixedThreadPool不同的是,CachedThreadPool的任務隊列其實相當于一個空的集合,這將導致任何任務都會被執行,因為在這種場景下SynchronousQueue是不能插入任務的,SynchronousQueue是一個特殊的隊列,在很多情況下可以理解為一個無法儲存元素的隊列。從CachedThreadPool的特性看,這類線程比較適合執行大量耗時較小的任務。當整個線程池都處于閑置狀態時,線程池中的線程都會因為超時而被停止回收,幾乎是不占任何系統資源。

ScheduledThreadPool

通過Executors的newScheduledThreadPool方式創建,核心線程數量是固定的,而非核心線程是沒有限制的,并且當非核心線程閑置時它會被立即回收,ScheduledThreadPool這類線程池主要用于執行定時任務和具有固定時期的重復任務。
延遲:

public class ThreadPoolExecutorTest { 
 public static void main(String[] args) {
 ScheduledExecutorService scheduledThreadPool= Executors.newScheduledThreadPool(3); 
 scheduledThreadPool.schedule(newRunnable(){  
  @Override
  public void run() {
  System.out.println("延遲三秒");
  }
 }, 3, TimeUnit.SECONDS);
 }
}

定時:

public class ThreadPoolExecutorTest { 
 public static void main(String[] args) {
 
 ScheduledExecutorService scheduledThreadPool= Executors.newScheduledThreadPool(3); 
 scheduledThreadPool.scheduleAtFixedRate(newRunnable(){ 
 @Override  
 public void run() {
  System.out.println("延遲1秒后每三秒執行一次");
  }
 },1,3,TimeUnit.SECONDS);
 }
 
}

SingleThreadExecutor

通過Executors的newSingleThreadExecutor方法來創建。這類線程池內部只有一個核心線程,它確保所有的任務都在同一個線程中按順序執行。SingleThreadExecutor的意義在于統一所有外界任務一個線程中,這使得這些任務之間不需要處理線程同步的問題

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

沾化县| 清水县| 万荣县| 宜君县| 白城市| 崇州市| 西林县| 固始县| 庄河市| 渝北区| 金山区| 定襄县| 长兴县| 南木林县| 涡阳县| 富平县| 梨树县| 阳山县| 吴忠市| 微博| 乐平市| 滕州市| 伊川县| 乐昌市| 三台县| 沐川县| 龙口市| 秦皇岛市| 灯塔市| 台东县| 丹寨县| 福鼎市| 江源县| 六枝特区| 滕州市| 绥化市| 正安县| 苏州市| 平凉市| 明溪县| 嘉黎县|