更新時(shí)間:2023-03-23 來(lái)源:黑馬程序員 瀏覽量:
在Java中,創(chuàng)建線程池有兩種常見的方式:
1.通過 Executors 工具類提供的靜態(tài)方法創(chuàng)建線程池。
2.通過 ThreadPoolExecutor 構(gòu)造函數(shù)自定義線程池。
下面是兩種方式的代碼示例:
通過 Executors 工具類提供的靜態(tài)方法創(chuàng)建線程池:
import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class ThreadPoolExample { public static void main(String[] args) { // 創(chuàng)建固定大小的線程池 ExecutorService executor = Executors.newFixedThreadPool(5); // 提交任務(wù)給線程池 for (int i = 0; i < 10; i++) { executor.execute(new Task()); } // 關(guān)閉線程池 executor.shutdown(); } static class Task implements Runnable { public void run() { System.out.println("Executing task on thread: " + Thread.currentThread().getName()); } } }
2.通過 ThreadPoolExecutor 構(gòu)造函數(shù)自定義線程池:
import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.ThreadPoolExecutor; public class ThreadPoolExample { public static void main(String[] args) { // 自定義線程池 ThreadPoolExecutor executor = new ThreadPoolExecutor( 2, // 核心線程數(shù) 5, // 最大線程數(shù) 1, // 空閑線程存活時(shí)間 TimeUnit.SECONDS, // 存活時(shí)間單位 new LinkedBlockingQueue<Runnable>() // 任務(wù)隊(duì)列 ); // 提交任務(wù)給線程池 for (int i = 0; i < 10; i++) { executor.execute(new Task()); } // 關(guān)閉線程池 executor.shutdown(); } static class Task implements Runnable { public void run() { System.out.println("Executing task on thread: " + Thread.currentThread().getName()); } } }
在上面的示例中,我們創(chuàng)建了兩個(gè)線程池,一個(gè)是固定大小的線程池,一個(gè)是自定義線程池。在兩個(gè)線程池中,我們都提交了 10 個(gè)任務(wù)給線程池執(zhí)行。每個(gè)任務(wù)都只是打印當(dāng)前線程的名稱。最后,我們調(diào)用了線程池的 shutdown() 方法關(guān)閉線程池。