一课舍、幾個(gè)比較重要的類(lèi)
1.Executor接口:線(xiàn)程池的根接口膛壹。
2.ExecutorService接口:繼承Executor,線(xiàn)程池常見(jiàn)操作接口驶赏。
3.ScheduledExecutorService接口:繼承ExecutorService耕驰,添加了重復(fù)執(zhí)行任務(wù)的操作爷辱。
4.ThreadPoolExecutor類(lèi):ExecutorService的默認(rèn)實(shí)現(xiàn)。
5.ScheduledThreadPoolExecutor類(lèi):繼承ThreadPoolExecutor類(lèi)耍属,并實(shí)現(xiàn)ScheduledExecutorService接口托嚣,是周期性任務(wù)調(diào)度的類(lèi)實(shí)現(xiàn)。
二厚骗、Java通過(guò)Executors類(lèi)提供四種線(xiàn)程池示启,分別為:
1.newCachedThreadPool
創(chuàng)建一個(gè)可緩存線(xiàn)程池,如果線(xiàn)程池長(zhǎng)度超過(guò)處理需要领舰,可靈活回收空閑線(xiàn)程夫嗓,若無(wú)可回收,則新建線(xiàn)程冲秽。 該類(lèi)返回ThreadPoolExecutor實(shí)例舍咖,corePoolSize為0;maximumPoolSize為Integer.MAX_VALUE锉桑;keepAliveTime為60L排霉;unit為T(mén)imeUnit.SECONDS;workQueue為SynchronousQueue(同步隊(duì)列)民轴。
2.newFixedThreadPool
創(chuàng)建一個(gè)定長(zhǎng)線(xiàn)程池攻柠,可控制線(xiàn)程最大并發(fā)數(shù)球订,超出的線(xiàn)程會(huì)在隊(duì)列中等待。 該類(lèi)返回ThreadPoolExecutor實(shí)例瑰钮,接收參數(shù)為所設(shè)定線(xiàn)程數(shù)量nThread冒滩,corePoolSize為nThread,maximumPoolSize為nThread浪谴;keepAliveTime為0L(不限時(shí))开睡;unit為:TimeUnit.MILLISECONDS;WorkQueue為:new LinkedBlockingQueue<Runnable>() 無(wú)界阻塞隊(duì)列苟耻。
3.newScheduledThreadPool
創(chuàng)建一個(gè)定長(zhǎng)線(xiàn)程池篇恒,支持定時(shí)及周期性任務(wù)執(zhí)行。 FinalizableDelegatedExecutorService包裝的ThreadPoolExecutor實(shí)例梁呈,corePoolSize為1婚度;maximumPoolSize為1;keepAliveTime為0L官卡;unit為:TimeUnit.MILLISECONDS;workQueue為:new LinkedBlockingQueue<Runnable>() 無(wú)界阻塞隊(duì)列醋虏。
4.newSingleThreadExecutor
創(chuàng)建一個(gè)單線(xiàn)程化的線(xiàn)程池寻咒,它只會(huì)用唯一的工作線(xiàn)程來(lái)執(zhí)行任務(wù),保證所有任務(wù)按照指定順序(FIFO, LIFO, 優(yōu)先級(jí))執(zhí)行颈嚼。創(chuàng)建ScheduledThreadPoolExecutor實(shí)例毛秘,corePoolSize為傳遞來(lái)的參數(shù),maximumPoolSize為Integer.MAX_VALUE阻课;keepAliveTime為0叫挟;unit為:TimeUnit.NANOSECONDS;workQueue為:new DelayedWorkQueue() 一個(gè)按超時(shí)時(shí)間升序排序的隊(duì)列限煞。
備注:有的代碼規(guī)范推薦用ThreadPoolExecutor手工創(chuàng)建線(xiàn)程池抹恳,而不是用Executors提供的線(xiàn)程池工具去創(chuàng)建,因?yàn)樽畲缶€(xiàn)程數(shù)為Integer.MAX_VALUE的線(xiàn)程池工具署驻,因?yàn)榭赡軙?huì)導(dǎo)致OOM奋献。
參考鏈接:
自定義線(xiàn)程池內(nèi)置線(xiàn)程池的使用 ThreadPoolExecutor和Executorservice 示例與注意事項(xiàng) https://blog.csdn.net/qq_41358574/article/details/121852746
ExecutorService和ThreadPoolExecutor https://blog.csdn.net/qq_36898043/article/details/79732711
并發(fā)隊(duì)列之無(wú)界阻塞隊(duì)列LinkedBlockingQueue https://blog.csdn.net/weixin_38192427/article/details/117262033
Java四種線(xiàn)程池使用 https://blog.csdn.net/achuo/article/details/80623893
Java線(xiàn)程池種類(lèi)、區(qū)別和適用場(chǎng)景 https://blog.csdn.net/w05980598/article/details/79425071