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

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日

悬赏问题

  • ¥500 寻找一名机械工程师完成pcb主板设计(拒绝AI生成式答案)
  • ¥15 关于#mysql#的问题:UNION ALL(相关搜索:sql语句)
  • ¥15 matlab二位可视化能否针对不同数值范围分开分级?
  • ¥15 已经创建了模拟器但是不能用来运行app 怎么办😭自己搞两天了
  • ¥15 关于#极限编程#的问题,请各位专家解答!
  • ¥20 win11账户锁定时间设为0无法登录
  • ¥45 C#学生成绩管理系统
  • ¥30 matlab appdesigner私有函数嵌套整合
  • ¥15 vb6.0使用jmail接收smtp邮件并另存附件到D盘
  • ¥30 vb net 使用 sendMessage 如何输入鼠标坐标