在 Java 中,有以下幾種常見(jiàn)的線(xiàn)程池類(lèi)型:
1. FixedThreadPool(固定大小線(xiàn)程池):該線(xiàn)程池維護(hù)固定數(shù)量的線(xiàn)程,在執(zhí)行任務(wù)時(shí)不會(huì)創(chuàng)建新的線(xiàn)程。如果所有線(xiàn)程都處于活動(dòng)狀態(tài),新的任務(wù)會(huì)在等待隊(duì)列中等待。
示例代碼:
ExecutorService executor = Executors.newFixedThreadPool(5);
2. CachedThreadPool(緩存線(xiàn)程池):該線(xiàn)程池的線(xiàn)程數(shù)量是沒(méi)有限制的,它會(huì)根據(jù)需要?jiǎng)?chuàng)建新的線(xiàn)程。如果有空閑線(xiàn)程可用,會(huì)重用空閑線(xiàn)程;如果沒(méi)有可用的空閑線(xiàn)程,則創(chuàng)建新的線(xiàn)程。
示例代碼:
ExecutorService executor = Executors.newCachedThreadPool();
3. SingleThreadExecutor(單線(xiàn)程線(xiàn)程池):該線(xiàn)程池只有一個(gè)線(xiàn)程,用于按順序執(zhí)行提交的任務(wù)。如果該線(xiàn)程意外終止,會(huì)創(chuàng)建一個(gè)新的線(xiàn)程來(lái)替代它。適用于需要保證順序執(zhí)行任務(wù)的場(chǎng)景。
示例代碼:
ExecutorService executor = Executors.newSingleThreadExecutor();
4. ScheduledThreadPool(定時(shí)任務(wù)線(xiàn)程池):該線(xiàn)程池用于執(zhí)行定時(shí)任務(wù)和周期性任務(wù)??梢灾付ň€(xiàn)程數(shù)量,可以調(diào)度任務(wù)在固定的延遲或周期執(zhí)行。
示例代碼:
ScheduledExecutorService executor = Executors.newScheduledThreadPool(3);
除了以上常見(jiàn)的線(xiàn)程池類(lèi)型,還可以使用 ThreadPoolExecutor 類(lèi)自定義線(xiàn)程池。ThreadPoolExecutor 提供了更靈活的配置選項(xiàng),如核心線(xiàn)程數(shù)、最大線(xiàn)程數(shù)、等待隊(duì)列大小、線(xiàn)程工廠(chǎng)、拒絕策略等。
示例代碼:
ThreadPoolExecutor executor = new ThreadPoolExecutor(
corePoolSize,
maximumPoolSize,
keepAliveTime,
TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<Runnable>(),
threadFactory,
rejectedExecutionHandler
);
這些線(xiàn)程池類(lèi)型提供了不同的線(xiàn)程管理策略和資源配置,可以根據(jù)具體的需求選擇適合的線(xiàn)程池類(lèi)型。使用線(xiàn)程池可以提高線(xiàn)程的復(fù)用性和線(xiàn)程調(diào)度的效率,避免了頻繁地創(chuàng)建和銷(xiāo)毀線(xiàn)程的開(kāi)銷(xiāo)。