java-執行緒池佇列飽和策略
1、當一個有限佇列充滿後,執行緒池的飽和策略開始起作用。
2、ThreadPoolExecutor的飽和策略通過呼叫setRejectedExecutionHandler來修改。不同的飽和策略如下:
1)AbortPolicy:中止,executor丟擲未檢查RejectedExecutionException,呼叫者捕獲這個異常,然後自己編寫能滿足自己需求的處理程式碼。
2)DiscardRunsPolicy:遺棄最舊的,選擇丟棄的任務,是本應接下來就執行的任務。
3)DiscardPolicy:遺棄會預設放棄最新提交的任務(這個任務不能進入佇列等待執行時)
4)CallerRunsPolicy:呼叫者執行,既不會丟棄哪個任務,也不會丟擲任何異常,把一些任務推回到呼叫者那裡,以此減緩新任務流。它不會在池執行緒中執行最新提交的任務,但它會在一個呼叫了execute的執行緒中執行。
3、建立一個可變長的執行緒池,使用受限佇列和呼叫者執行飽和策略。
ThreadPoolExecutor executor=new ThreadPoolExecutor(N_THREADS,N_THREADS,0L,TimeUnit.MILLISECONDS,new LinkedBlockingQueue<Runnable>(CAPACITY));
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
4、當執行緒佇列充滿後,並沒有預置的飽和策略來阻塞execute。但是,使用Semaphore訊號量可以實現這個效果。Semaphore會限制任務注入率。
@ThreadSafe
public class BoundedExecutor{
private final Executor exec;
private final Semaphore semaphore;
public BoundedExecutor(Executor exec,int bound){
this.exec=exec;
this.semaphore=new Semaphore(bound);
}
public void submitTask(final Runnable command) throws InterruptedException{
semaphore.acquire();
try{
exec.execute(new Runnable(){
public void run(){
try{
command.run();
}
finally{
semaphore.release();
}
}
});
}catch (RejectedExecutionException e){
semaphore.release();
}
}
}
相關文章
- java-執行緒池(一)Java執行緒
- java多執行緒:執行緒池原理、阻塞佇列Java執行緒佇列
- java執行緒池-工作佇列workQueueJava執行緒佇列
- 執行緒池與工作佇列(轉)執行緒佇列
- 探討阻塞佇列和執行緒池原始碼佇列執行緒原始碼
- JAVA-執行緒池淺析Java執行緒
- 執行緒池的阻塞佇列的理解執行緒佇列
- Java執行緒池maximumPoolSize和workQueue哪個先飽和?Java執行緒
- java自帶執行緒池和佇列詳細講解Java執行緒佇列
- 執行緒池監控2-監控執行緒池狀態、執行緒數量和佇列任務數量等執行緒佇列
- Java幾種執行緒池及任務佇列Java執行緒佇列
- 執行緒和執行緒池執行緒
- 踩坑 Spring Cloud Hystrix 執行緒池佇列配置SpringCloud執行緒佇列
- 原始碼剖析ThreadPoolExecutor執行緒池及阻塞佇列原始碼thread執行緒佇列
- C# 使用執行緒池佇列(學習筆記)C#執行緒佇列筆記
- 主佇列&主執行緒佇列執行緒
- 證明執行緒池ThreadPoolExecutor的核心執行緒數,最大執行緒數,佇列長度的關係執行緒thread佇列
- Android的執行緒和執行緒池Android執行緒
- 執行緒池中的最大執行緒數、核心執行緒數和佇列大小的合理設定執行緒佇列
- Java併發程式設計:4種執行緒池和緩衝佇列BlockingQueueJava程式設計執行緒佇列BloC
- JAVA-快速瞭解執行緒池的基本原理Java執行緒
- iOS 多執行緒--GCD 序列佇列、併發佇列以及同步執行、非同步執行iOS執行緒GC佇列非同步
- Java 執行緒池四種拒絕策略Java執行緒
- 多執行緒-執行緒池的概述和使用執行緒
- Java執行緒池二:執行緒池原理Java執行緒
- 多執行緒學習-Disruptor佇列執行緒佇列
- iOS-佇列.執行緒.任務iOS佇列執行緒
- 淺談執行緒池(上):執行緒池的作用及CLR執行緒池執行緒
- 執行緒池和Executor框架執行緒框架
- 多執行緒【執行緒池】執行緒
- 執行緒 執行緒池 Task執行緒
- 美團面試題:Java-執行緒池 ThreadPool 專題詳解面試題Java執行緒thread
- 多執行緒:執行緒池理解和使用總結執行緒
- 《Java 高階篇》七:執行緒和執行緒池Java執行緒
- 執行緒池的建立和使用,執行緒池原始碼初探(篇一)執行緒原始碼
- SpringBoot執行緒池和Java執行緒池的實現原理Spring Boot執行緒Java
- Java 併發:執行緒、執行緒池和執行器全面教程Java執行緒
- Java中命名執行器服務執行緒和執行緒池Java執行緒