【问题标题】:How to get queue and pool size from ScheduledExecutorService如何从 ScheduledExecutorService 获取队列和池大小
【发布时间】:2020-01-27 12:21:44
【问题描述】:

我正在创建一个调度程序并安排一个延迟 2 秒的作业。但在安排特定作业之前,我想检查 ScheduledExecutorService 的池大小和队列大小,但我找不到任何方法。谁能建议我如何在安排任何作业之前检查 ScheduledExecutorService 的池大小和队列大小。

   //here i have created ScheduledExecutorService 
private static final ScheduledExecutorService SCHEDULED_EXECUTOR_SERVICE;


static {
     //initialized  ScheduledExecutorService with 30 pool size
    Scheduled_Executor_Service = (ThreadPoolExecutor) Executors.newScheduledThreadPool(30);
}


public void addTaskTOSchedule(){

  //Here i want to check poolsize and queue size of SCHEDULED_EXECUTOR_SERVICE if 
  //ScheduledExecutorService already used more then specific number thread then i will not schedule job

SCHEDULED_EXECUTOR_SERVICE.schedule(() -> {
                    User user = new User();
                    SCHEDULED_EXECUTOR_SERVICE.execute(user);
                }, 2000, TimeUnit.MILLISECONDS);
}

【问题讨论】:

    标签: java multithreading scheduled-tasks java.util.concurrent


    【解决方案1】:

    ScheduledExecutorService 接口不允许访问内部队列。您必须将服务强制转换为实现类才能获得队列的大小,如下所示:

    ScheduledExecutorService Scheduled_Executor_Service = Executors.newScheduledThreadPool(30);
            if (Scheduled_Executor_Service instanceof ScheduledThreadPoolExecutor) {
                ScheduledThreadPoolExecutor implementation = (ScheduledThreadPoolExecutor) Scheduled_Executor_Service;
                int size = implementation.getQueue().size();
    
            }
    

    【讨论】:

      猜你喜欢
      • 2015-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-28
      • 2018-08-19
      相关资源
      最近更新 更多