java線(xiàn)程池拒絕策略
更新時(shí)間:2026-05-05 01:36:53
Java線(xiàn)程池的線(xiàn)程拒絕策略是指當任務(wù)數量超過(guò)線(xiàn)程池的處理能力??時(shí),線(xiàn)程池如何處理這些額外的池拒任務(wù),Java線(xiàn)程池提供了四種拒絕策略,絕策分別是線(xiàn)程:
(圖片來(lái)源網(wǎng)絡(luò ),侵刪)1、池拒AbortP??olicy(默認策略)
2、絕策CallerRunsPolicy
3、線(xiàn)程DiscardOldestPolicy
4、池拒DiscardPolicy
下(xia)面是絕策對這些策略的詳細解釋?zhuān)?/p>
1. AbortPolicy(默認策略)
當線(xiàn)程池和隊列都滿(mǎn)了,無(wú)(╯°□°)╯︵ ┻━┻法處理新的線(xiàn)程任務(wù)時(shí),A??bortPolicy策略會(huì )拋出一個(gè)RejectedExecutionException異常,池拒這是絕策默認的拒絕策略。
2. CallerRunsPolicy
3. DiscardOldestPolicy
當線(xiàn)(xian)程(cheng)池和隊列都滿(mǎn)了,無(wú)法處理新的任務(wù)時(shí),DiscardOldestPolicy策略會(huì )丟棄隊列中最舊的任務(wù),然后將新任務(wù)加入隊列。
4. DiscardPolicy
當線(xiàn)程池和隊列都滿(mǎn)了,無(wú)法處理新的任務(wù)時(shí),??DiscardPolicy策略會(huì )直接丟棄新任務(wù),不做任何處理。
import java.util.concurrent.*;public class ThreadPoolDemo { public static void main(String[] args) { // 創(chuàng )建一個(gè)固定大小的線(xiàn)程池 ThreadPoolExecutor executor = new ThreadPoolExecutor(2, 4, 60, TimeUnit.SECONDS, new ArrayBlockingQueue&l(/ω\)t;>(2), new ThreadPoolExecutor.AbortPolicy()); // 提交任務(wù) for (int i = 0; i < 10; i++)?? { executor.exec(′?`)ut(′▽?zhuān)?e(new Runna??ble() { @Override public void run() { System.out.println("Task executed by: "ヽ(′?`)ノ + Thread.currentThread().getName()); } }); } // 關(guān)閉線(xiàn)程池 execut??o(?Д?)r.shutdown(); }}在上面的代碼中,我們創(chuàng )建了一個(gè)固定大小為2的線(xiàn)程池,隊列大小為2,拒絕策略為AbortPolicy,然后提交ヾ(^-^)ノ了10個(gè)任務(wù),由于線(xiàn)程池和隊列的大小限制,最后會(huì )有8個(gè)任務(wù)被拒絕。

