JAVA 線程池 (二)使用線程池

創(chuàng)建線程池:

關系(看源碼):

????????????ThreadPoolExecutor ?extends AbstractExecutorService

? ??????????AbstractExecutorService implements ExecutorService

? ??????????ExecutorService extends Executor

ExecutorService executors =?new ThreadPoolExecutor(....)

executors.submit("Runable或者Callable"); //放入線程池 有返回結果

executors.execute("Runable");//放入線程池 有返回結果

上面兩者具體解釋和作用請看這里

executors.shutdown();//關閉線程池

允許之前已經(jīng)提交但未執(zhí)行或未完成的任務繼續(xù)完成

executors.shutdownnow();//關閉線程池

阻止已經(jīng)提交(但尚未運行的)的任務運行并且嘗試停止正在運行的任務

CachedThreadPool

CachedThreadPool 是通過 java.util.concurrent.Executors 創(chuàng)建的 ThreadPoolExecutor 實例。這個實例會根據(jù)需要,在線程可用時,重用之前構造好的池中線程。這個線程池在執(zhí)行?大量短生命周期的異步任務時(many short-lived asynchronous task),可以顯著提高程序性能。調用?execute?時,可以重用之前已構造的可用線程,如果不存在可用線程,那么會重新創(chuàng)建一個新的線程并將其加入到線程池中。如果線程超過 60 秒還未被使用,就會被中止并從緩存中移除。因此,線程池在長時間空閑后不會消耗任何資源。

Integer.MAX_VALUE =?2147483647

FixedThreadPool

FixedThreadPool 是通過 java.util.concurrent.Executors 創(chuàng)建的 ThreadPoolExecutor 實例。這個實例會復用?固定數(shù)量的線程?處理一個?共享的無邊界隊列?。任何時間點,最多有 nThreads 個線程會處于活動狀態(tài)執(zhí)行任務。如果當所有線程都是活動時,有多的任務被提交過來,那么它會一致在隊列中等待直到有線程可用。如果任何線程在執(zhí)行過程中因為錯誤而中止,新的線程會替代它的位置來執(zhí)行后續(xù)的任務。所有線程都會一致存于線程池中,直到顯式的執(zhí)行 ExecutorService.shutdown() 關閉。

這里的核心線程數(shù)設置規(guī)則:

Runtime.getRuntime().availableProcessors() = Ncpu(cpu核數(shù))

IO密集型=2Ncpu ? ??計算密集型=Ncpu+1 ? ? (百度 io密集型和計算密集型)


純屬個人理解 ??

不理解或者是有什么錯誤的地方、歡迎留言并會及時回復和改正的

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內容