線程池飽和策略

1.Abort策略:默認策略,新任務提交時直接拋出未檢查的異常RejectedExecutionException,該異常可由調用者捕獲。java

new ThreadPoolExecutor.AbortPolicy()

2.CallerRuns策略:爲調節機制,既不拋棄任務也不拋出異常,而是將某些任務回退到調用者。不會在線程池的線程中執行新的任務,而是在調用exector的線程中運行新的任務。線程

new ThreadPoolExecutor.CallerRunsPolicy()

3.Discard策略:新提交的任務被拋棄。code

new ThreadPoolExecutor.DiscardPolicy()

4.DiscardOldest策略:隊列的是「隊頭」的任務,而後嘗試提交新的任務。對頭任務被丟棄(不適合工做隊列爲優先隊列場景)隊列

new ThreadPoolExecutor.DiscardOldestPolicy()

5.自定義飽和處理策略get

import java.util.concurrent.RejectedExecutionHandler;
import java.util.concurrent.ThreadPoolExecutor;

/**
 * 循環,當隊列有空位時,該任務進入隊列,等待線程池處理
 */
public class TestRejectedExecutionHandler implements RejectedExecutionHandler {

	public void rejectedExecution(Runnable r, ThreadPoolExecutor executor) {
		try {
			executor.getQueue().put(r);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}

}
相關文章
相關標籤/搜索