У меня есть следующий фрагмент кода:Как работают ExecutorService (int n) и Thread.activeCount()?
int k = 4;
ExecutorService e = Executors.newFixedThreadPool(k);
for (int i = 1; i <= k; i++) {
e.execute(new C(i));
e.execute(new C(i));
}
int active = Thread.activeCount();
System.out.println(active);
e.shutdown();
Ясно видно, я представить два C
каждой итерации цикла. В моем случае отправляются 8 C
, хотя у ExecutorService установлен фиксированный размер 4. Это также подтверждается подсчетом активных потоков, которые равны 5.
Предполагается ли такое поведение? Я не понимаю, почему, по-видимому, только 4 новых потока запускаются и подсчитываются, в то время как 8 представлены. Я был бы очень рад, если бы кто-то смог прояснить концепцию ExecutorService и Thread.activeCount() для меня.
* предназначено ли это поведение * Какое поведение? Что вы удивитесь? Какое поведение вы ожидаете? – shmosel
@shmosel, если вы не знакомы с концессорными предложениями, я хотел бы направить вас следующим образом: http://dictionary.cambridge.org/dictionary/english/concessive-clause – blauerschluessel
** В моем случае представлены 8 C, хотя ExecutorService имеет фиксированный размер 4 **, Executors.newFixedThreadPool (int), обрабатывает ПОСТОЯННО РАБОТАЮЩИЕ 4 РЕЗЬБЫ В ВРЕМЯ, и когда какой-либо поток заканчивает выполнение, те остальные 4 потока, которые были поставлены в очередь через e.execute (Runnable), будут в противном случае эти ДРУГИЕ 4 ОТ 8 потоков будут ждать завершения ДРУГОГО 4 ОТ 8 потоков, которые находятся в запущенном состоянии в пуле, ничто не должно удивлять, хотя – ShayHaned