固定執行緒池和快取執行緒池的區別。


Executor 框架是使用執行緒池的概念設計的。執行緒池是一種重用已建立執行緒的方式,而不是每次執行當前任務時都建立一個新執行緒。

Executors 類提供了一個工廠方法來建立執行緒池。ThreadPoolExecutor 類是許多 Executors 工廠方法返回的執行器的基本實現。

序號關鍵點固定執行緒池快取執行緒池
1
基礎
根據 Java 文件 -
建立一個執行緒池,該執行緒池重用固定數量的執行緒來處理共享的無界佇列中的任務。在任何時候,最多 nThreads 個執行緒將處於活動狀態以處理任務。如果在所有執行緒都處於活動狀態時提交了其他任務,它們將等待在佇列中,直到有執行緒可用。如果在關閉之前,任何執行緒由於執行期間的故障而終止,則如果需要執行後續任務,將會有一個新的執行緒取代它。池中的執行緒將一直存在,直到顯式關閉。
根據 Java 文件 -
建立一個執行緒池,該執行緒池根據需要建立新執行緒,但在有可用執行緒時會重用先前構建的執行緒。這些池通常可以提高執行許多短暫的非同步任務的程式的效能。對 execute 的呼叫將重用先前構建的執行緒(如果可用)。如果沒有可用的現有執行緒,則將建立一個新執行緒並新增到池中。
2
佇列
它使用阻塞佇列。


它使用同步佇列。
佇列。


3
執行緒生命週期
它將使所有執行緒保持執行,直到它們被顯式終止。
60 秒內未使用的執行緒將被終止並從快取中刪除。
4.
執行緒池大小
執行緒池大小是固定的,因此不會增長。
執行緒池可以從零個執行緒增長到 Integer.MAX_VALUE。
5.
使用場景
當我們想要限制併發任務時,應該使用固定執行緒池。
當您有很多可預測的任務時,可以使用它。
 

固定執行緒池示例

public class Main {
   public static void main(String args[]) throws InterruptedException {
      ExecutorService executors = Executors.newFixedThreadPool(4);
      CountDownLatch latch= new CountDownLatch(2);
      executors.submit(new Service1(latch));
      executors.submit(new Service2(latch));
      latch.await();
      System.out.println("Done");
   }

import java.util.concurrent.CountDownLatch;
public class Service1 implements Runnable {
   CountDownLatch latch;
   public Service1(CountDownLatch latch) {
      super();
      this.latch = latch;
   }
   @Override
   public void run() {
      try {
         Thread.sleep(20000);
      } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
         }
         latch.countDown();
         System.out.println("Services2"+latch.getCount());
      }
   }
   import java.util.concurrent.CountDownLatch;
   public class Service2 implements Runnable {
      CountDownLatch latch;
      public Service2(CountDownLatch latch) {
         super();
         this.latch = latch;
      }
      @Override
      public void run() {
         try {
            Thread.sleep(20000);
         } catch (InterruptedException e) {
         // TODO Auto-generated catch block
         e.printStackTrace();
      }
   latch.countDown();
   System.out.println("Services2"+latch.getCount());
   }
}

更新於: 2020-09-09

4K+ 瀏覽量

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.