ScheduledExecutorService и метод его расписания.Как это устроено? - PullRequest
0 голосов
/ 12 декабря 2018

У меня есть такой код:

    ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(1);
    for (int i = 0; i < 20; i++) {
        scheduledExecutorService.schedule(() ->
                System.out.println("Hello" + Thread.currentThread().getName()), 20, TimeUnit.SECONDS);
    }
    scheduledExecutorService.schedule(() ->
            System.out.println("Hello first " + Thread.currentThread().getName()), 5, TimeUnit.SECONDS);

    scheduledExecutorService.shutdown();

Я отлаживал этот код и был удивлен, что метод Thread.start () был выполнен только один раз.Что происходит с потоком, когда я выполняю этот метод расписания?Это в ожидании или заблокирован или где-то еще?

1 Ответ

0 голосов
/ 12 декабря 2018

Executors.newScheduledThreadPool создает пул потоков с фиксированным числом потоков:

Создает пул потоков, который может планировать выполнение команд после заданной задержки или периодическое выполнение.

Параметры: corePoolSize - количество потоков в пуле, даже если они простаивают.

Все задачи, запланированные для выполнения с этим экземпляром службы executor, будутобрабатываться в одном потоке.

В: Что происходит с потоком, когда я выполняю этот метод расписания?Он находится в состоянии ожидания или заблокирован или где-то еще?

Поток ожидает выполнения новых задач и может завершить работу в зависимости от конфигурации пула потоков - см. ThreadPoolExecutor.getTask ().

...