cn.buli_home.utils.thread.RejectPolicy Maven / Gradle / Ivy
package cn.buli_home.utils.thread;
import lombok.Getter;
import java.util.concurrent.RejectedExecutionHandler;
import java.util.concurrent.ThreadPoolExecutor;
/**
* 线程拒绝策略枚举
*
*
* 如果设置了maxSize, 当总线程数达到上限, 会调用RejectedExecutionHandler进行处理,此枚举为JDK预定义的几种策略枚举表示
*
* @author mustard
*/
@Getter
public enum RejectPolicy {
/**
* 处理程序遭到拒绝将抛出RejectedExecutionException
*/
ABORT(new ThreadPoolExecutor.AbortPolicy()),
/**
* 放弃当前任务
*/
DISCARD(new ThreadPoolExecutor.DiscardPolicy()),
/**
* 如果执行程序尚未关闭,则位于工作队列头部的任务将被删除,然后重试执行程序(如果再次失败,则重复此过程)
*/
DISCARD_OLDEST(new ThreadPoolExecutor.DiscardOldestPolicy()),
/**
* 由主线程来直接执行
*/
CALLER_RUNS(new ThreadPoolExecutor.CallerRunsPolicy()),
/**
* 当任务队列过长时处于阻塞状态,直到添加到队列中,固定并发数去访问,并且不希望丢弃任务时使用此策略
*/
BLOCK(new BlockPolicy());
/**
* -- GETTER --
* 获取RejectedExecutionHandler枚举值
*/
private final RejectedExecutionHandler value;
RejectPolicy(RejectedExecutionHandler handler) {
this.value = handler;
}
}