Количество активных потоков не уменьшается даже после закрытия потока - PullRequest
2 голосов
/ 22 апреля 2019

В приведенном ниже коде Thread.activeCount () всегда возвращает 2, даже если поток в исполнителе завершается через 5 секунд.

public class MainLoop {
    public static void main(String[] args) throws Exception {
        ExecutorService executor = Executors.newFixedThreadPool(12);
        executor.submit(new Callable<Void>() {
            public Void call() throws Exception {
                Thread.sleep(5000);
                return null;
            }
        });
        while (true) {
            System.out.println(Thread.activeCount());
            Thread.sleep(1000);
        }
    }
}

Я ожидал, что Thread.activeCount () вернет 1 через 5 секунд. Почему всегда возвращается 2?

Ответы [ 2 ]

4 голосов
/ 22 апреля 2019

См. Документы newFixedThreadPool.https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/Executors.html#newFixedThreadPool(int)

В любой момент не более потоков nThreads будут активными задачами обработки.Потоки в пуле будут существовать до тех пор, пока он не будет явно отключен.

После того, как этот исполнитель будет отправлен на вызов, он будет прокачан и обработан одним из потоков пула.После завершения этого выполнения поток будет бездействовать в пуле в ожидании следующего вызова.

0 голосов
/ 22 апреля 2019

Вы должны завершить работу executorService, используя service.shutdown(), иначе он продолжит распределять ресурсы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...