java 如何获取当前线程池中积压的数据

比如我有一个线程池,里面有1w个任务,但是单次只执行5个任务,我想实时获取当前积压的数据,案例如下

     ExecutorService executorService = new ThreadPoolExecutor(9, 9,
                0, TimeUnit.MILLISECONDS,
                new LinkedBlockingQueue<>(), new BasicThreadFactory.Builder().namingPattern("attach-transform-job-%d")
                .daemon(true).build());
         int i=0;
         while (i++<10000){
             executorService.execute(()->{
                //模拟执行任务
                 try {
                     TimeUnit.SECONDS.sleep(5);
                 } catch (InterruptedException e) {
                     e.printStackTrace();
                 }
                 System.out.println("执行结束");
             });
         }

方法一,调用线程池的getTaskCount()方法 可以获取一个近似的值,但是这个方法会加主锁,频繁调用影响性能。

img

方法二:继承ThreadPoolExecutor 重写afterExecute(Runnable r, Throwable t) 这个方法,在这个方法里实现计数功能,当执行完任务或执行任务异常都会调这个方法,所以可以试试计数。

img

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632

总数减去当前执行数不就行了吗。

img