來源丨blog.csdn.net/dabusiGin/article/details/105323796
在學(xué)習(xí)CallerRunsPolicy拒絕策略的時(shí)候,搜索了很多相關(guān)的知識(shí),其他博主的描述是這樣的:
第1種:
第2種:
第3種:
第4種:JDK文檔(漢化版)
他們的描述讓我看的很懵逼,特別是第3種,仔細(xì)看他的測(cè)試代碼,并沒有用CallerRunsPolicy,而是用的AbortPolicy拒絕策略。。。。這是一篇高瀏覽量的博文,而且多人轉(zhuǎn)載。
其中上面幾種情況中寫到的“execute方法的調(diào)用線程”、“調(diào)用者線程”、“execute函數(shù)的上層線程”、“execute本身的線程”就是指的主線程,舉個(gè)例子如下圖所示,主線程就是平時(shí)執(zhí)行main方法中代碼的線程。
再通過一個(gè)例子詳細(xì)說明:
class MyTask implements Runnable {
private String id;
public MyTask(String id) {
this.id = id;
}
public void run() {
System.out.println(id);
}
}
public class RejectPolicy {
public static void main(String[] args) {
ExecutorService es = new ThreadPoolExecutor(2, 2, 0L, TimeUnit.MILLISECONDS,
new ArrayBlockingQueue《Runnable》(3), Executors.defaultThreadFactory(),
new ThreadPoolExecutor.CallerRunsPolicy());
MyTask t1 = new MyTask(“id:1”);
MyTask t2 = new MyTask(“id:2”);
MyTask t3 = new MyTask(“id:3”);
MyTask t4 = new MyTask(“id:4”);
MyTask t5 = new MyTask(“id:5”);
MyTask t6 = new MyTask(“id:6”);
MyTask t7 = new MyTask(“id:7”);
es.execute(t1);
es.execute(t2);
es.execute(t3);
es.execute(t4);
es.execute(t5);
es.execute(t6);
es.execute(t7);
}
}
這里使用主要參數(shù)是:核心線程數(shù)為2、最大線程數(shù)為2、有界隊(duì)列(容量為3)、默認(rèn)線程工廠、CallerRunsPolicy拒絕策略。
運(yùn)行結(jié)果如下:
id:1
id:2
id:3
id:4
id:6
id:5
id:7
可以看到所有的任務(wù)都執(zhí)行了,沒有真正意義上被拒絕的。
學(xué)習(xí)資料:Java進(jìn)階視頻資源
代碼中定義了核心線程數(shù)為2的線程池,一共有7個(gè)任務(wù)要執(zhí)行,其中2個(gè)任務(wù)創(chuàng)建線程執(zhí)行去了,3個(gè)任務(wù)放入了任務(wù)隊(duì)列(workQueue)。
當(dāng)提交到第6個(gè)任務(wù)的時(shí)候,會(huì)觸發(fā)拒絕策略,在這里我們配置了CallerRunsPolicy策略,主線程直接執(zhí)行第六個(gè)任務(wù)去了,不再向下執(zhí)行main方法中的es.execute(t7)這段代碼。
也就是說,在本程序中最多會(huì)有3個(gè)任務(wù)在執(zhí)行,3個(gè)在等待。由此限制了線程池的等待任務(wù)數(shù)與執(zhí)行線程數(shù)。所以JDK文檔才會(huì)說:“這提供了一個(gè)簡(jiǎn)單的反饋控制機(jī)制,將降低新任務(wù)提交的速度”。
我的一點(diǎn)個(gè)人理解,希望能有助理解。
責(zé)任編輯:haq
-
處理程序
+關(guān)注
關(guān)注
0文章
3瀏覽量
5472 -
線程池
+關(guān)注
關(guān)注
0文章
57瀏覽量
7048
原文標(biāo)題:大多數(shù)人不知道的:線程池CallerRunsPolicy()拒絕策略
文章出處:【微信號(hào):AndroidPush,微信公眾號(hào):Android編程精選】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
電機(jī)大范圍調(diào)速的綜合電壓調(diào)制策略
永磁同步電機(jī)矢量控制策略分析
變頻器維修相關(guān)知識(shí)

《AI Agent 應(yīng)用與項(xiàng)目實(shí)戰(zhàn)》閱讀心得3——RAG架構(gòu)與部署本地知識(shí)庫
【第一章 透?jìng)?b class='flag-5'>策略】手把手教你玩轉(zhuǎn)新版正點(diǎn)原子云
嵌入式系統(tǒng)存儲(chǔ)的軟件優(yōu)化策略
淵亭KGAG升級(jí)引入“高級(jí)策略推理”
設(shè)計(jì)模式-策略模式

一文解析半導(dǎo)體產(chǎn)業(yè)鏈條以及相關(guān)知識(shí)

一文解析半導(dǎo)體產(chǎn)業(yè)鏈條以及相關(guān)知識(shí)

接口測(cè)試?yán)碚摗⒁蓡柺珍浥c擴(kuò)展相關(guān)知識(shí)點(diǎn)

連接器相關(guān)基礎(chǔ)知識(shí)大講解
【技術(shù)分享】CAN總線相關(guān)知識(shí)探討以及Model3C兩路CAN的應(yīng)用

評(píng)論