线程池(3)-线程池监控

public class ThreadTemplate {
    /**监控线程池*/
    private final static ScheduledExecutorService scheduledExecutorService = new ScheduledThreadPoolExecutor(
            1,
            new BasicThreadFactory.Builder()
                    .namingPattern(
                            "监控线程-%d")
                    .daemon(true)
                    .build());
    
    /**业务线程池*/
    private final static ThreadPoolExecutor THREAD_POOL_EXECUTOR  = new ThreadPoolExecutor(
            5,
            10,
            300,
            TimeUnit.SECONDS,
            new LinkedBlockingQueue<Runnable>(
                    1000),
            new  BasicThreadFactory.Builder()
                    .namingPattern(
                            "业务线程-%d")
                    .build(),
            new ThreadPoolExecutor.AbortPolicy());


    static {
        scheduledExecutorService.scheduleAtFixedRate(new Runnable() {
            @Override
            public void run() {
                log.info( (
                        String.format("业务线程池活动线程=%s,阻塞队列=%s",
                                THREAD_POOL_EXECUTOR.getActiveCount(), THREAD_POOL_EXECUTOR.getQueue().size())));
            }
        }, 0, 3, TimeUnit.SECONDS);
    }

}

在我们项目中监控使用 ScheduledThreadPoolExecutor 定时监控业务线程池,定时打印线程状态,可以根据业务需要设置定时间隔,业务线程池的拒绝策略使用AbortPolicy抛出RejectedExecutionException,在业务代码中一定要catch这个异常,将业务参数打印出来,人工做后续的补偿,并且及时调整线程池参数

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值