java线程池、自定义拒绝策略

1、线程池场创建

private static final int CPU_COUNT = Runtime.getRuntime().availableProcessors();// 获取cpu个数
    private static final ThreadFactory namedThreadFactory = (new ThreadFactoryBuilder()).setNameFormat("xxxxx-call-runner-%d").build();
    private static final ExecutorService taskExe = new ThreadPoolExecutor(
            //核心线程数
            CPU_COUNT,
            //最大线程数
            CPU_COUNT * 5,
            //多长时间把非核心空闲线程交还操作系统
            1,
            TimeUnit.MINUTES,
            //阻塞队列 队列长度
            new LinkedBlockingQueue(512),
            //设置线程名
            namedThreadFactory,
            //拒绝策略 当提交任务数超过最大线程数+队列 之和时触发
            new xxxxRejectedExecutionHandler()

    );

2、默认拒绝策略(如:ThreadPoolExecutor.AbortPolicy)

2.1 AbortPolicy 默认拒绝策略、抛出异常

private static final RejectedExecutionHandler defaultHandler = new AbortPolicy();

  public void rejectedExecution(Runnable r, ThreadPoolExecutor e) {
            throw new RejectedExecutionException("Task " + r.toString() +
                                                 " rejected from " +
                                                 e.toString());
}

2.2 CallerRunsPolicy 线程池没有关闭,线程直接运行

public void rejectedExecution(Runnable r, ThreadPoolExecutor e) {
            if (!e.isShutdown()) {
                r.run();
            }
}

2.3 DiscardPolicy 不处理

public void rejectedExecution(Runnable r, ThreadPoolExecutor e) {
 }

2.4 DiscardOldestPolicy 线程池没有关闭,会抛弃任务队列中最旧的任务,再把新任务添加进去。

public void rejectedExecution(Runnable r, ThreadPoolExecutor e) {
            if (!e.isShutdown()) {
                e.getQueue().poll();
                e.execute(r);
            }
}

3、自定义策略(满了阻塞线程)

@Slf4j
public class xxxRejectedExecutionHandler implements RejectedExecutionHandler {

    @Override
    public void rejectedExecution(Runnable r, ThreadPoolExecutor executor) {
        try {
            //满了就等待
            executor.getQueue().put(r);
        } catch (InterruptedException e) {
            log.error("拒绝策略异常",e);
        }

    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值