來(lái)源丨blog.csdn.net/dabusiGin/article/details/105323796
在學(xué)習(xí)CallerRunsPolicy拒絕策略的時(shí)候,搜索了很多相關(guān)的知識(shí),其他博主的描述是這樣的:
第1種:
第2種:
第3種:
第4種:JDK文檔(漢化版)
他們的描述讓我看的很懵逼,特別是第3種,仔細(xì)看他的測(cè)試代碼,并沒(méi)有用CallerRunsPolicy,而是用的AbortPolicy拒絕策略。。。。這是一篇高瀏覽量的博文,而且多人轉(zhuǎn)載。
其中上面幾種情況中寫(xiě)到的“execute方法的調(diào)用線程”、“調(diào)用者線程”、“execute函數(shù)的上層線程”、“execute本身的線程”就是指的主線程,舉個(gè)例子如下圖所示,主線程就是平時(shí)執(zhí)行main方法中代碼的線程。
再通過(guò)一個(gè)例子詳細(xì)說(shuō)明:
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í)行了,沒(méi)有真正意義上被拒絕的。
學(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)這段代碼。
也就是說(shuō),在本程序中最多會(huì)有3個(gè)任務(wù)在執(zhí)行,3個(gè)在等待。由此限制了線程池的等待任務(wù)數(shù)與執(zhí)行線程數(shù)。所以JDK文檔才會(huì)說(shuō):“這提供了一個(gè)簡(jiǎn)單的反饋控制機(jī)制,將降低新任務(wù)提交的速度”。
我的一點(diǎn)個(gè)人理解,希望能有助理解。
責(zé)任編輯:haq
-
處理程序
+關(guān)注
關(guān)注
0文章
3瀏覽量
5445 -
線程池
+關(guān)注
關(guān)注
0文章
57瀏覽量
6868
原文標(biāo)題:大多數(shù)人不知道的:線程池CallerRunsPolicy()拒絕策略
文章出處:【微信號(hào):AndroidPush,微信公眾號(hào):Android編程精選】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論