线程池饱和策略

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();
		}
	}

}
相关文章
相关标签/搜索