怎樣接做網(wǎng)站的活電商代運營公司十強
線程池可以減少創(chuàng)建和銷毀線程的次數(shù),從而減少系統(tǒng)資源的消耗。當一個任務(Runnable或Callable對象)(Runnable無返回值,Callable有返回值)被提交到線程池時:
一、首先判斷核心線程池中的線程是否已經(jīng)滿了,如果沒滿,則創(chuàng)建一個核心線
程來執(zhí)行任務,否則進入下一步。
二、判斷工作隊列是否已滿,沒有滿則加入工作隊列,否則執(zhí)行下一步。
三、判斷線程數(shù)是否達到了最大值,如果不是,則創(chuàng)建非核心線程執(zhí)行任務,否
則執(zhí)行飽和策略(需要實現(xiàn)接口RejectedExecutionHandler。默認為ThreadPoolExecutor.AbortPolicy策略,會拋出RejectedExecutionException異常)。
1.內置的飽和策略:
1).ThreadPoolExecutor.AbortPolicy:拒絕執(zhí)行任務。
2).ThreadPoolExecutor.CallerRunsPolicy:由調用者線程執(zhí)行該任務。
3).ThreadPoolExecutor.DiscardPolicy:丟棄任務。
4).ThreadPoolExecutor.DiscardOldestPolicy:丟棄最舊的任務并嘗試重新提交新任務。
2.也可以自定義RejectedExecutionHandler接口來滿足實際需求。
四、引申
1.線程池中的線程數(shù)超過核心線程數(shù)時,多余的線程會在空閑一段時間(超過某個閾值keepAliveTime)后被銷毀,以減少資源消耗。
2.核心線程即使處于空閑狀態(tài)也不會被銷毀。
3.可以通過shutdown()方法來關閉線程池:此方式會等待線程池中的所有任務都執(zhí)行完成后再關閉線程池。
4.可以通過shutdownNow()方法來關閉 線程池:此方式會嘗試停止正在執(zhí)行的任務后關閉線程池。
5.關閉線程池時會停止接受新任務。
?
微風不燥,陽光正好,你就像風一樣經(jīng)過這里,愿你停留的片刻溫暖舒心。
我是程序員小迷(致力于C、C++、Java、Kotlin、Android、Shell、JavaScript、TypeScript、Python等編程技術的技巧經(jīng)驗分享),若作品對您有幫助,請關注、分享、點贊、收藏、在看、喜歡,您的支持是我們?yōu)槟峁椭淖畲髣恿Α?/p>
歡迎關注。助您在編程路上越走越好!