成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術文章
文章詳情頁

Java中有界隊列的飽和策略(reject policy)原理解析

瀏覽:159日期:2022-09-02 13:19:18

我們在使用ExecutorService的時候知道,在ExecutorService中有個一個Queue來保存提交的任務,通過不同的構造函數,我們可以創建無界的隊列(ExecutorService.newCachedThreadPool)和有界的隊列(ExecutorService newFixedThreadPool(int nThreads))。

無界隊列很好理解,我們可以無限制的向ExecutorService提交任務。那么對于有界隊列來說,如果隊列滿了該怎么處理呢?

今天我們要介紹一下java中ExecutorService的飽和策略(reject policy)。

以ExecutorService的具體實現ThreadPoolExecutor來說,它定義了4種飽和策略。分別是AbortPolicy,DiscardPolicy,DiscardOldestPolicy和CallerRunsPolicy。

如果要在ThreadPoolExecutor中設定飽和策略可以調用setRejectedExecutionHandler方法,如下所示:

ThreadPoolExecutor threadPoolExecutor= new ThreadPoolExecutor(5, 10, 10, TimeUnit.SECONDS, new LinkedBlockingDeque<Runnable>(20)); threadPoolExecutor.setRejectedExecutionHandler(new ThreadPoolExecutor.AbortPolicy() );

上面的例子中我們定義了一個初始5個,最大10個工作線程的Thread Pool,并且定義其中的Queue的容量是20。如果提交的任務超出了容量,則會使用AbortPolicy策略。

AbortPolicy

AbortPolicy意思是如果隊列滿了,最新的提交任務將會被拒絕,并拋出RejectedExecutionException異常:

public static class AbortPolicy implements RejectedExecutionHandler { /** * Creates an {@code AbortPolicy}. */ public AbortPolicy() { } /** * Always throws RejectedExecutionException. * * @param r the runnable task requested to be executed * @param e the executor attempting to execute this task * @throws RejectedExecutionException always */ public void rejectedExecution(Runnable r, ThreadPoolExecutor e) { throw new RejectedExecutionException('Task ' + r.toString() + ' rejected from ' + e.toString()); } }

上面的代碼中,rejectedExecution方法中我們直接拋出了RejectedExecutionException異常。

DiscardPolicy

DiscardPolicy將會悄悄的丟棄提交的任務,而不報任何異常。

public static class DiscardPolicy implements RejectedExecutionHandler { /** * Creates a {@code DiscardPolicy}. */ public DiscardPolicy() { } /** * Does nothing, which has the effect of discarding task r. * * @param r the runnable task requested to be executed * @param e the executor attempting to execute this task */ public void rejectedExecution(Runnable r, ThreadPoolExecutor e) { } }

DiscardOldestPolicy

DiscardOldestPolicy將會丟棄最老的任務,保存最新插入的任務。

public static class DiscardOldestPolicy implements RejectedExecutionHandler { /** * Creates a {@code DiscardOldestPolicy} for the given executor. */ public DiscardOldestPolicy() { } /** * Obtains and ignores the next task that the executor * would otherwise execute, if one is immediately available, * and then retries execution of task r, unless the executor * is shut down, in which case task r is instead discarded. * * @param r the runnable task requested to be executed * @param e the executor attempting to execute this task */ public void rejectedExecution(Runnable r, ThreadPoolExecutor e) { if (!e.isShutdown()) {e.getQueue().poll();e.execute(r); } } }

我們看到在rejectedExecution方法中,poll了最老的一個任務,然后使用ThreadPoolExecutor提交了一個最新的任務。

CallerRunsPolicy

CallerRunsPolicy和其他的幾個策略不同,它既不會拋棄任務,也不會拋出異常,而是將任務回退給調用者,使用調用者的線程來執行任務,從而降低調用者的調用速度。我們看下是怎么實現的:

public static class CallerRunsPolicy implements RejectedExecutionHandler { /** * Creates a {@code CallerRunsPolicy}. */ public CallerRunsPolicy() { } /** * Executes task r in the caller’s thread, unless the executor * has been shut down, in which case the task is discarded. * * @param r the runnable task requested to be executed * @param e the executor attempting to execute this task */ public void rejectedExecution(Runnable r, ThreadPoolExecutor e) { if (!e.isShutdown()) {r.run(); } } }

在rejectedExecution方法中,直接調用了 r.run()方法,這會導致該方法直接在調用者的主線程中執行,而不是在線程池中執行。從而導致主線程在該任務執行結束之前不能提交任何任務。從而有效的阻止了任務的提交。

使用Semaphore

如果我們并沒有定義飽和策略,那么有沒有什么方法來控制任務的提交速度呢?考慮下之前我們講到的Semaphore,我們可以指定一定的資源信號量來控制任務的提交,如下所示:

public class SemaphoreUsage { private final Executor executor; private final Semaphore semaphore; public SemaphoreUsage(Executor executor, int count) { this.executor = executor; this.semaphore = new Semaphore(count); } public void submitTask(final Runnable command) throws InterruptedException { semaphore.acquire(); try { executor.execute(() -> { try { command.run(); } finally { semaphore.release(); } } ); } catch (RejectedExecutionException e) { semaphore.release(); } }}

本文的例子可參考https://github.com/ddean2009/learn-java-concurrency/tree/master/rejectPolicy

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Java
相關文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
91女厕偷拍女厕偷拍高清| 久久久精品综合| 国产亚洲成av人在线观看导航 | 极品裸体白嫩激情啪啪国产精品| 精品国产免费一区二区三区香蕉| 国内久久精品视频| 91久久精品一区二区二区| 五月综合激情日本mⅴ| 蜜桃av噜噜一区二区三区| 亚洲福利一二三区| 老司机午夜精品视频在线观看| 亚洲18色成人| 色国产综合视频| 老司机精品视频一区二区三区| 色www精品视频在线观看| 丝袜美腿亚洲色图| 色吧成人激情小说| 五月天久久比比资源色| 一本高清dvd不卡在线观看| 秋霞午夜鲁丝一区二区老狼| 日本久久一区二区三区| 日韩va亚洲va欧美va久久| 翔田千里一区二区| 日韩精品三区四区| 欧美日韩亚洲国产综合| 国产精品自拍三区| 亚洲精品在线免费观看视频| 91香蕉视频污| 国产精品伦理在线| 亚洲精选一区| 午夜精品久久久久影视| 在线观看网站黄不卡| 免费在线一区观看| 在线观看91av| 99精品国产一区二区三区不卡| 久久久国产一区二区三区四区小说| 91欧美一区二区| 国产精品久久久久久久久图文区| 97久久超碰国产精品| 一区二区中文字幕在线| 亚洲高清激情| 亚洲大片免费看| 欧美午夜一区二区三区| 丁香婷婷综合色啪| 欧美激情一区二区在线| 日韩五码在线| 男女男精品视频| 正在播放亚洲一区| 91免费精品国自产拍在线不卡| 亚洲欧洲av另类| 麻豆9191精品国产| 国产伦精品一区二区三区免费迷| 久久众筹精品私拍模特| 亚洲激情网站| 喷水一区二区三区| 精品蜜桃在线看| 狠狠入ady亚洲精品经典电影| 一区二区三区视频在线看| 久久久久se| 国产一区二区女| 日本一区二区三区电影| 国产精品毛片一区二区三区| 奇米精品一区二区三区在线观看 | 日韩视频在线观看一区二区| 色综合久久中文字幕| 亚洲一二三区不卡| 欧美一区二区免费| 最新国产乱人伦偷精品免费网站| 美腿丝袜一区二区三区| 久久综合中文字幕| 亚洲欧美色一区| 欧美三区免费完整视频在线观看| 国产宾馆实践打屁股91| 亚洲欧美在线视频| 91久久免费观看| 91浏览器入口在线观看| 性做久久久久久免费观看| 日韩欧美第一区| 国产欧美一级| 国产不卡视频一区二区三区| 亚洲乱码国产乱码精品精小说| 欧美午夜寂寞影院| 国产综合网站| 狠狠色狠狠色综合日日91app| 国产精品人妖ts系列视频| 一本大道久久a久久精品综合| 成人高清视频在线| 一区二区三区高清在线| 69堂精品视频| 亚洲巨乳在线| 国产成人亚洲综合a∨猫咪| 亚洲精品第1页| 欧美mv和日韩mv的网站| 亚洲在线播放电影| www.av精品| 日本三级亚洲精品| 欧美国产日韩在线观看| 欧洲亚洲精品在线| 国内精品视频在线播放| 久久国产日韩欧美精品| 国产精品精品国产色婷婷| 在线观看91精品国产麻豆| 99www免费人成精品| 丰满放荡岳乱妇91ww| 亚洲第一成人在线| 国产日韩av一区| 欧美日韩三级视频| 在线亚洲欧美| 日韩免费高清视频| 色女孩综合影院| 一色屋精品视频在线观看网站| 国模一区二区三区白浆| 亚洲免费观看高清完整版在线 | 亚洲欧洲视频| 国产精品自拍三区| 日韩极品在线观看| 亚洲天天做日日做天天谢日日欢| 日韩一区二区在线免费观看| 亚洲欧美日韩视频二区| 欧美日本久久| 国产盗摄女厕一区二区三区| 一区二区三区毛片| 久久久九九九九| 7777精品伊人久久久大香线蕉经典版下载 | 亚洲免费观看高清完整| 日韩欧美一区在线观看| 色视频一区二区| 一区二区毛片| 欧美高清视频一区二区三区在线观看 | 亚洲国产精品精华液网站| 亚洲精品在线电影| 欧洲一区在线电影| 国产精品资源| 亚洲欧洲综合| 国产精品啊v在线| 成人开心网精品视频| 看片网站欧美日韩| 偷拍日韩校园综合在线| 亚洲精品国产高清久久伦理二区| 国产欧美一区二区精品性色| 91精品国产色综合久久ai换脸| 一本一本久久a久久精品综合麻豆| 日韩午夜免费视频| 国产精品theporn| 91麻豆国产在线观看| 国产不卡视频在线观看| 精品写真视频在线观看| 日韩高清不卡一区| 亚洲一区免费在线观看| 国产精品麻豆久久久| 国产视频一区二区在线观看| 欧美成人精品二区三区99精品| 欧美色综合网站| 久久综合久久久| 性欧美长视频| 国产精品乱子乱xxxx| 一区二区三区四区五区视频| 激情六月综合| 国产一区视频观看| 欧美午夜精品| 色综合天天性综合| a美女胸又www黄视频久久| 国产.欧美.日韩| 国产毛片精品国产一区二区三区| 麻豆国产欧美日韩综合精品二区| 天堂蜜桃91精品| 日韩福利视频导航| 久久精品国产成人一区二区三区 | 在线视频国内自拍亚洲视频| 欧美日韩精品免费观看视一区二区| eeuss鲁片一区二区三区在线观看| 狠狠久久亚洲欧美| 精品一区二区影视| 麻豆一区二区三区| 另类小说视频一区二区| 老司机午夜精品99久久| 国模套图日韩精品一区二区| 国产剧情一区二区| 丰满少妇久久久久久久| 91在线无精精品入口| 色综合一区二区| 国产精品二区在线观看| 亚洲经典自拍| 久久国产精品亚洲77777| 日本大香伊一区二区三区| 欧美三级资源在线| 欧美xxxx老人做受| 国产日产欧美精品一区二区三区| 中文字幕第一区二区| 中文字幕一区二区不卡| 亚洲品质自拍视频网站| 亚洲综合图片区| 秋霞国产午夜精品免费视频| 国内成+人亚洲+欧美+综合在线| 国产精品一区专区| www.亚洲国产| 欧美日韩国产高清视频| 99精品国产在热久久下载| 久久三级视频| 欧美日本在线播放|