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