Как получить очередь и размер пула от ScheduledExecutorService - PullRequest
2 голосов
/ 27 сентября 2019

Я создаю планировщик и планирую задание с задержкой в ​​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);
}

1 Ответ

3 голосов
/ 27 сентября 2019

Интерфейс 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();

        }
...