在 Java 中,有以下幾種常見(jiàn)的線(xiàn)程池實(shí)現(xiàn):
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);
這些線(xiàn)程池實(shí)現(xiàn)都是通過(guò) `java.util.concurrent.Executors` 類(lèi)提供的靜態(tài)方法創(chuàng)建的。除了以上常見(jiàn)的線(xiàn)程池實(shí)現(xiàn),還可以使用 `java.util.concurrent.ThreadPoolExecutor` 類(lèi)自定義線(xiàn)程池,提供更靈活的配置選項(xiàng),如核心線(xiàn)程數(shù)、最大線(xiàn)程數(shù)、等待隊(duì)列大小、線(xiàn)程工廠(chǎng)、拒絕策略等。
使用線(xiàn)程池可以提高線(xiàn)程的復(fù)用性和線(xiàn)程調(diào)度的效率,避免了頻繁地創(chuàng)建和銷(xiāo)毀線(xiàn)程的開(kāi)銷(xiāo)。選擇適當(dāng)?shù)木€(xiàn)程池實(shí)現(xiàn)取決于具體的需求和場(chǎng)景,需要根據(jù)實(shí)際情況進(jìn)行選擇。