在 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);
除了以上常見的線程池類型,還可以使用 ThreadPoolExecutor 類自定義線程池。ThreadPoolExecutor 提供了更靈活的配置選項,如核心線程數、最大線程數、等待隊列大小、線程工廠、拒絕策略等。
示例代碼:
ThreadPoolExecutor executor = new ThreadPoolExecutor(
corePoolSize,
maximumPoolSize,
keepAliveTime,
TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<Runnable>(),
threadFactory,
rejectedExecutionHandler
);
這些線程池類型提供了不同的線程管理策略和資源配置,可以根據具體的需求選擇適合的線程池類型。使用線程池可以提高線程的復用性和線程調度的效率,避免了頻繁地創建和銷毀線程的開銷。