執行緒池是一種管理執行緒的資源,它可以在系統中創建、重用和銷毀執行緒,執行緒池的主要優點是減少了創建和銷毀執行緒的開銷,提高了系統的性能,
Java中的執行緒池由java.util.concurrent.ExecutorService介面和它的實作類表示,ExecutorService提供了一些用于管理執行緒池的方法,如submit()、execute()、shutdown()等,
5.3.1 創建執行緒池
Java提供了幾種創建執行緒池的方法:
Executors.newFixedThreadPool(int nThreads): 創建一個固定大小的執行緒池,最多可以同時運行nThreads個執行緒,Executors.newCachedThreadPool(): 創建一個可快取的執行緒池,如果執行緒池的當前大小超過處理需求,則回收空閑的執行緒;如果需要額外執行緒,則創建新執行緒,Executors.newSingleThreadExecutor(): 創建一個只有一個執行緒的執行緒池,Executors.newScheduledThreadPool(int corePoolSize): 創建一個可以定時執行任務的執行緒池,
5.3.2 使用執行緒池
我們可以使用ExecutorService的submit()或execute()方法將任務提交給執行緒池,這些任務通常是實作java.lang.Runnable介面或java.util.concurrent.Callable介面的類的實體,
Runnable介面的任務沒有回傳值,而Callable介面的任務可以回傳一個值,如果任務是Callable實體,我們可以使用submit()方法提交任務,并獲得一個java.util.concurrent.Future實體,該實體表示任務的結果,
示例:使用執行緒池執行任務
import java.util.concurrent.*;
public class ThreadPoolExample {
public static void main(String[] args) {
ExecutorService executor = Executors.newFixedThreadPool(5);
// 使用execute()方法提交Runnable任務
for (int i = 0; i < 5; i++) {
executor.execute(new RunnableTask(i));
}
// 使用submit()方法提交Callable任務
Future<Integer> future = executor.submit(new CallableTask());
try {
System.out.println("CallableTask的結果: " + future.get());
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
executor.shutdown();
}
}
class RunnableTask implements Runnable {
private int taskId;
public RunnableTask(int taskId) {
this.taskId = taskId;
}
@Override
public void run() {
System.out.println("RunnableTask " + taskId + " is running.");
}
}
class CallableTask implements Callable<Integer> {
@Override
public Integer call() {
int sum = 0;
for (int i = 1; i <= 100; i++) {
sum += i;
}
return sum;
}
}
在上述示例中,我們創建了一個固定大小的執行緒池,并提交了5個Runnable任務和1個Callable任務,我們還使用Future實體獲取了Callable任務的結果,
5.3.3 關閉執行緒池
當我們不再需要執行緒池時,應該將其關閉,可以使用ExecutorService的shutdown()方法或shutdownNow()方法關閉執行緒池,shutdown()方法會等待所有已提交的任務完成,而shutdownNow()方法會嘗試立即停止所有正在執行的任務,
小結
在本章節,我們討論了Java多執行緒與并發的“5.3 執行緒池”,我們了解了如何創建執行緒池、如何使用執行緒池執行任務以及如何關閉執行緒池,執行緒池是Java并發編程中的重要概念,可以幫助我們更有效地管理執行緒資源,提高程式性能,
請務必多加實踐,以便更好地掌握這些知識點,祝你學習順利!
推薦閱讀:
https://mp.weixin.qq.com/s/dV2JzXfgjDdCmWRmE0glDA
https://mp.weixin.qq.com/s/an83QZOWXHqll3SGPYTL5g

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/554082.html
標籤:其他
下一篇:返回列表
