yewanji 2022-02-28 17:50 采纳率: 36.2%
浏览 126
已结题

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("执行结束");
             });
         }
  • 写回答

3条回答 默认 最新

  • heling_m6ss 2022-02-28 18:15
    关注

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

    img

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

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 3月15日
  • 已采纳回答 3月7日
  • 创建了问题 2月28日

悬赏问题

  • ¥170 如图所示配置eNSP
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改
  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥15 键盘指令混乱情况下的启动盘系统重装