yewanji 2022-02-28 17:50 采纳率: 36.1%
浏览 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条回答 默认 最新

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

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

    img

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

    img

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

报告相同问题?

问题事件

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

悬赏问题

  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
  • ¥50 如何openEuler 22.03上安装配置drbd
  • ¥20 ING91680C BLE5.3 芯片怎么实现串口收发数据
  • ¥15 无线连接树莓派,无法执行update,如何解决?(相关搜索:软件下载)
  • ¥15 Windows11, backspace, enter, space键失灵