Java中的線程池有以下幾種:
1.FixedThreadPool:固定大小的線程池,創(chuàng)建時(shí)需要指定線程池的大小,當(dāng)線程池中的線程都在執(zhí)行任務(wù)時(shí),新的任務(wù)需要等待。
2.CachedThreadPool:可緩存的線程池,可以無限擴(kuò)大線程池的大小,當(dāng)線程池中的線程空閑一定時(shí)間后,會被回收,當(dāng)有新的任務(wù)需要執(zhí)行時(shí),又會重新創(chuàng)建一個(gè)新的線程。
3.SingleThreadPool:只有一個(gè)線程的線程池,所有任務(wù)按照指定順序在該線程中執(zhí)行,如果該線程異常結(jié)束,會重新創(chuàng)建一個(gè)新的線程繼續(xù)執(zhí)行任務(wù),保證任務(wù)的順序性。
4.ScheduledThreadPool:定時(shí)執(zhí)行任務(wù)的線程池,支持延遲執(zhí)行和定時(shí)執(zhí)行兩種任務(wù),可以用于定時(shí)任務(wù)、定時(shí)檢查等場景。
5.WorkStealingPool:工作竊取線程池,該線程池默認(rèn)創(chuàng)建的線程數(shù)是 CPU 核心數(shù),線程使用雙端隊(duì)列,當(dāng)一個(gè)線程執(zhí)行完自己的任務(wù)后,會從其他線程的隊(duì)列中竊取任務(wù)來執(zhí)行,保證任務(wù)的平衡性和執(zhí)行效率。