日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

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

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

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

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

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

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

如果要在ThreadPoolExecutor中設(shè)定飽和策略可以調(diào)用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。如果提交的任務(wù)超出了容量,則會使用AbortPolicy策略。

AbortPolicy

AbortPolicy意思是如果隊列滿了,最新的提交任務(wù)將會被拒絕,并拋出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將會悄悄的丟棄提交的任務(wù),而不報任何異常。

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將會丟棄最老的任務(wù),保存最新插入的任務(wù)。

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了最老的一個任務(wù),然后使用ThreadPoolExecutor提交了一個最新的任務(wù)。

CallerRunsPolicy

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

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方法中,直接調(diào)用了 r.run()方法,這會導(dǎo)致該方法直接在調(diào)用者的主線程中執(zhí)行,而不是在線程池中執(zhí)行。從而導(dǎo)致主線程在該任務(wù)執(zhí)行結(jié)束之前不能提交任何任務(wù)。從而有效的阻止了任務(wù)的提交。

使用Semaphore

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

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

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Java
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
亚洲一区二区三区四区电影| 国产成人精品三级高清久久91| 美女网站一区| 国产亚洲欧美日韩精品一区二区三区 | 国产欧美一区二区三区国产幕精品 | 亚洲精品在线二区| 色偷偷色偷偷色偷偷在线视频| 日本精品在线中文字幕| 欧美日韩在线观看视频小说| 欧美天堂亚洲电影院在线观看| 国产精品99久久久久久董美香| 影院欧美亚洲| av综合电影网站| 丰满少妇一区| 欧美亚洲三级| 99tv成人| 国产精品免费99久久久| 日韩成人综合| 日韩精品高清不卡| 精品理论电影在线| 视频在线观看一区| 精品一区亚洲| 精品在线播放| 欧美日本二区| 91精品国产自产在线观看永久∴| 噜噜噜久久亚洲精品国产品小说| 久久在线视频免费观看| 成人在线免费观看网站| 国产精品视频一区二区三区四蜜臂 | 91av亚洲| 另类中文字幕国产精品| 中文字幕成人| 精品久久在线| 激情偷拍久久| 日本aⅴ精品一区二区三区| av免费不卡国产观看| 蜜桃久久久久久| 国产精品v一区二区三区| 精品免费在线| 精品国产91| 久久精品二区亚洲w码| av中文字幕在线观看第一页| 亚洲精品一级二级| 麻豆久久久久久久| 久久夜夜操妹子| 亚洲成人国产| 国内揄拍国内精品久久| 日本午夜精品久久久久| 国产精品99一区二区| 精品视频免费| 欧美国产三级| 国产精品99一区二区三区| 日韩av电影一区| 亚洲自啪免费| 久久久久久亚洲精品美女| 在线视频亚洲| 亚洲精品1区| 玖玖玖国产精品| 国产色99精品9i| 日韩精品永久网址| 欧美另类专区| 美女网站久久| 国产精品欧美日韩一区| 在线观看一区| 国产精品99免费看| 欧美羞羞视频| 国产精品白丝av嫩草影院| 日本在线视频一区二区| 亚洲伊人精品酒店| 欧美日韩一二三四| 性一交一乱一区二区洋洋av| 久久一区二区三区喷水| 国产偷自视频区视频一区二区| 日本蜜桃在线观看视频| 欧美日韩激情| 综合干狼人综合首页| 久久婷婷一区| 精品久久97| 日韩综合小视频| 国产亚洲一区二区三区啪| 亚洲精品免费观看| 日本大胆欧美人术艺术动态| 亚洲婷婷在线| 91精品91| 首页国产欧美日韩丝袜| 中文字幕在线视频久| 国产videos久久| 久久99久久人婷婷精品综合| 在线一区视频观看| 麻豆国产精品| 国产欧美另类| 国产一区二区精品久| 亚洲国产日韩欧美在线| 91看片一区| 日韩高清二区| 成人在线观看免费视频| 亚洲高清不卡| 美女国产精品| 国内自拍视频一区二区三区| 亚洲午夜天堂| 不卡av一区二区| 日韩精品欧美大片| 免费看av不卡| 一二三区精品| 国产麻豆精品| 免费日韩av| 国产免费av国片精品草莓男男| 一区在线视频观看| 亚洲欧洲高清| 国产日韩欧美一区| 欧美日本二区| 日韩精品亚洲一区二区三区免费| 欧美一区免费| 蜜桃久久精品一区二区| 久久激情中文| 国产精品色婷婷在线观看| 国产精品免费看| 国产99久久久国产精品成人免费| 国产美女久久| 日韩国产欧美三级| 99久久夜色精品国产亚洲1000部| 久久国产麻豆精品| 日韩欧美高清一区二区三区| 一本一道久久a久久| 亚洲免费观看高清完整版在线观| 国产精品对白久久久久粗| 久久久影院免费| 国产精品va视频| 免费在线观看一区二区三区| 国产精品大片| 免费在线观看视频一区| 日本国产精品| 国产传媒在线观看| 中文字幕在线高清| 国产九一精品| 日韩中文字幕一区二区高清99| 国内一区二区三区| 国产欧美欧美| 亚洲乱码久久| 久久美女性网| 日本一二区不卡| 国产精品99久久免费观看| 99国内精品| 免费久久精品视频| 亚洲一区欧美激情| 国产毛片一区| 中文字幕一区二区三区日韩精品 | 久久狠狠亚洲综合| 欧美久久精品一级c片| 91精品国产成人观看| 国产成人a视频高清在线观看| 精品一区二区三区亚洲| 精品一区二区三区在线观看视频 | 国产亚洲欧美日韩在线观看一区二区| 天海翼亚洲一区二区三区| 中文另类视频| 在线成人直播| 日韩欧美中文字幕一区二区三区| 日本午夜精品视频在线观看| 视频一区二区中文字幕| 国产精品99精品一区二区三区∴ | 免费在线看一区| 性感美女一区二区在线观看| 少妇精品在线| 美女少妇全过程你懂的久久| 国产探花一区在线观看| 在线一区欧美| 亚洲国产福利| 欧美视频久久| 综合精品一区| 久久黄色影院| 国产一区精品福利| 国产毛片久久久| 在线看片日韩| 在线亚洲观看| 快播电影网址老女人久久| 国产精品22p| 久久精品xxxxx| 日韩精品视频一区二区三区| 国产在线不卡| 免费不卡中文字幕在线| 日韩不卡免费高清视频| 久久久国产精品入口麻豆| 欧美自拍一区| 亚洲精品少妇| 一区二区视频欧美| 四虎4545www国产精品| 精品久久99| 国产在线观看91一区二区三区| 国产精品一区二区av交换| 免费看精品久久片| 日韩影院免费视频| 免费观看日韩电影| 伊人精品在线| 三级一区在线视频先锋| 国产精品嫩草99av在线| 蜜芽一区二区三区| 日韩精品三级| 久久久精品国产**网站| 国产一区精品福利|