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