Я борюсь с чем-то глупо простым ...
Мой настоящий проект страдал от неизвестной проблемы целую вечность, я решил создать очень простой тест, и я испугался результатов ....
Вот тест:
ExecutorService t = new ThreadPoolExecutor(10, 20, 60L, TimeUnit.SECONDS, new ArrayBlockingQueue<Runnable>(600));
for (int i = 0; i < 100; i++) {
final int i1 = i;
t.execute(new Runnable() {
@Override
public void run() {
while (true) {
System.out.println(i1);
try {
Thread.sleep(5000);
}
catch (InterruptedException e) {
e.printStackTrace();
}
}
}
});
}
Я создаю пул потоков с 10 основными потоками плюс 20 maximumPoolSize
, затем я даю ему 100 потоков, которые просто напечатают фиксированныйчисло каждое ...
МОЯ ГЛУБИННАЯ ДУМА, ДУМАЛА, БЫЛА:
В пуле 10 потоков, будет печататься 0-9 случайным образом, затем через несколько мгновений будет создано 10 дополнительных потоков и пулбудет случайным образом печатать с 0-19
Для меня это очевидно, так как maxSize равен 20, в худшем случае он должен принять 20 задач ...
, но результат был 0-9 печатается вечно
вопрос: какой смысл maximumPoolSize
, если дополнительные потоки никогда не запланированы для выполнения?