固定執行緒池和快取執行緒池的區別。
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());
}
}
廣告
資料結構
網路
關係型資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP