日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java线程池饱和策略_线程池的饱和策略-调用者执行 | 学步园

發(fā)布時(shí)間:2025/4/16 编程问答 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java线程池饱和策略_线程池的饱和策略-调用者执行 | 学步园 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

java并發(fā)編程實(shí)踐閱讀筆記之線程池的飽和策略

使用java的任務(wù)管理框架的線程池執(zhí)行任務(wù)時(shí),線程池的任務(wù)等待隊(duì)列被填滿時(shí),飽和策略開始發(fā)揮作用。ThreadPollExecutor的飽和策略通過setRejectedExecutionHandler來修改。JDK提供了4中飽和策略如下:

AbortPolicy是默認(rèn)的飽和策略,該策略會(huì)拋出未檢查異常RejectedExecutionException,調(diào)用者可以捕獲這個(gè)異常,然后根據(jù)自己的需求編寫代碼。CallerRunsPolicy則提供了一種調(diào)節(jié)機(jī)制,該策略不會(huì)拋棄任務(wù),也不會(huì)拋出異常,而是將任務(wù)的運(yùn)行回退到任務(wù)調(diào)用者,在提交任務(wù)的線程中執(zhí)行該任務(wù)。下列例子中模擬了調(diào)用者運(yùn)行策略,線程池初始化大小為2,等待隊(duì)列大小為2,當(dāng)提交任務(wù)大于4個(gè)時(shí),第5個(gè)任務(wù)就會(huì)在任務(wù)提交的主線程中運(yùn)行。

public class MyCommand implements Runnable {

private String name;

public MyCommand(String name){

this.name = name;

}

@Override

public void run() {

System.out.println(Thread.currentThread().getName()+" ," +

"name: "+name+","+new Date());

try {

Thread.sleep(5000);

} catch (InterruptedException execption) {

execption.printStackTrace();

}

}

}

使用調(diào)用者運(yùn)行策略執(zhí)行任務(wù):

public class CallerRunTest {

private final ThreadPoolExecutor exec ;

public CallerRunTest(){

exec = new ThreadPoolExecutor(2,2,0L,TimeUnit.MICROSECONDS,

new LinkedBlockingQueue(2));

exec.setRejectedExecutionHandler(

new ThreadPoolExecutor.CallerRunsPolicy());

}

public static void main(String[] args) {

MyCommand c1 = new MyCommand("c1");

MyCommand c2 = new MyCommand("c2");

MyCommand c3 = new MyCommand("c3");

MyCommand c4 = new MyCommand("c4");

MyCommand c5 = new MyCommand("c5");

CallerRunTest c = new CallerRunTest();

c.submit(c1);

c.submit(c2);

c.submit(c3);

c.submit(c4);

c.submit(c5);

}

public void submit(Runnable command){

System.out.println(Thread.currentThread().getName()+" submit tast...");

exec.submit(command);

}

}

提交的任務(wù)打印一句任務(wù)名稱,然后休眠5秒,線程池大小為2,等待隊(duì)列大小為2 ,當(dāng)?shù)?個(gè)任務(wù)提交時(shí),它會(huì)在主線程中執(zhí)行,其他任務(wù)則都是由線程池調(diào)度運(yùn)行。運(yùn)行結(jié)果如下:

main submit tast...

main submit tast...

main submit tast...

main submit tast...

main submit tast...

pool-1-thread-1 ,name: c1,Mon Dec 15 15:55:02 CST 2014

main ,name: c5,Mon Dec 15 15:55:02 CST 2014

pool-1-thread-2 ,name: c2,Mon Dec 15 15:55:02 CST 2014

pool-1-thread-1 ,name: c4,Mon Dec 15 15:55:07 CST 2014

pool-1-thread-2 ,name: c3,Mon Dec 15 15:55:07 CST 2014

結(jié)論:調(diào)用者運(yùn)行的飽和策略實(shí)現(xiàn)了一種調(diào)節(jié)機(jī)制,當(dāng)工作隊(duì)列被填滿時(shí),下一個(gè)待執(zhí)行的任務(wù)會(huì)在任務(wù)提交主線程中執(zhí)行,由于任務(wù)執(zhí)行需要一定得時(shí)間,在任務(wù)運(yùn)行期間主線程將不能再提交任務(wù),以此可以降低任務(wù)的提交速率,為線程池正確更多的時(shí)間來完成正在排隊(duì)的任務(wù)。

《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

總結(jié)

以上是生活随笔為你收集整理的java线程池饱和策略_线程池的饱和策略-调用者执行 | 学步园的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。