Каковы фоновые потоки в подсчете активных потоков в Java? - PullRequest
0 голосов
/ 09 мая 2018

Я использую ExecutorService с 10 фиксированными потоками.

  ExecutorService service = Executors.newFixedThreadPool(10);

Когда я пытался узнать количество потоков, используя

  System.out.println(Thread.activeCount());

выход варьировался от 11 до 15.

Я знаю, что одна из этих тем является основной.

Но каковы другие темы?

1 Ответ

0 голосов
/ 09 мая 2018

В Java есть несколько потоков, которые работают в фоновом режиме, например Финализатор для вызова finalize() методов. Вы можете распечатать их, посмотрев на самую родительскую ThreadGroup :

ThreadGroup group = Thread.currentThread().getThreadGroup();
while (group.getParent() != null) {
  group = group.getParent();
}
Thread[] threads = new Thread[group.activeCount()];
group.enumerate(threads);
Arrays.stream(threads).forEach(System.out::println);

будет выводиться что-то вроде

Thread[Reference Handler,10,system]
Thread[Finalizer,8,system]
Thread[Signal Dispatcher,9,system]
Thread[Attach Listener,5,system]
Thread[main,5,main]
Thread[Monitor Ctrl-Break,5,main]

В вашем примере Thread.activeCount() является сокращением для Thread.currentThread().getThreadGroup().activeCount(), поэтому вы смотрите на самую верхнюю, текущую группу ThreadGroup.

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