#core создастся поток, иначе задачу положат в очередь. При #core <= #current < #max, TPE создаст поток только тогда, когда очередь режектнет задачу (что в случае LinkedBlockingQueue может и не произойти). Если задачи таким образом оказались уже в очереди, то по контракту setCorePoolSize должен бы развернуть больше воркеров. Этого не случилось, так? Тогда это баг в TPE.
Читал. Логически там не должно получатся ситуации, когда он не увеличит потоков до corepoolsize. То есть у нас есть два тригера. Либо мы подкинули задач и должны увеличить потоков, либо увеличить corepoolsize, и тогда он должен тоже добавить потоков и разобрать очередь. Получается что баг. Так как добавление потоков. Сейчас мы через спец вызов делаем prestartAllCoreThread. И это решает проблему, но получается костыль.
Обсуждают сегодня