在 Java 中,有以下幾種常見的線程池實現:
1. FixedThreadPool(固定大小線程池):該線程池維護固定數量的線程,在執行任務時不會創建新的線程。如果所有線程都處于活動狀態,新的任務會在等待隊列中等待。
示例代碼:
ExecutorService executor = Executors.newFixedThreadPool(5);
2. CachedThreadPool(緩存線程池):該線程池的線程數量是沒有限制的,它會根據需要創建新的線程。如果有空閑線程可用,會重用空閑線程;如果沒有可用的空閑線程,則創建新的線程。
示例代碼:
ExecutorService executor = Executors.newCachedThreadPool();
3. SingleThreadExecutor(單線程線程池):該線程池只有一個線程,用于按順序執行提交的任務。如果該線程意外終止,會創建一個新的線程來替代它。適用于需要保證順序執行任務的場景。
示例代碼:
ExecutorService executor = Executors.newSingleThreadExecutor();
4. ScheduledThreadPool(定時任務線程池):該線程池用于執行定時任務和周期性任務。可以指定線程數量,可以調度任務在固定的延遲或周期執行。
示例代碼:
ScheduledExecutorService executor = Executors.newScheduledThreadPool(3);
這些線程池實現都是通過 `java.util.concurrent.Executors` 類提供的靜態方法創建的。除了以上常見的線程池實現,還可以使用 `java.util.concurrent.ThreadPoolExecutor` 類自定義線程池,提供更靈活的配置選項,如核心線程數、最大線程數、等待隊列大小、線程工廠、拒絕策略等。
使用線程池可以提高線程的復用性和線程調度的效率,避免了頻繁地創建和銷毀線程的開銷。選擇適當的線程池實現取決于具體的需求和場景,需要根據實際情況進行選擇。