Одна вещь, которую вы должны знать, что ExecutorService
представляет собой интерфейс, а не класс, так что ответ может быть различными для различных реализаций ExecutorService
.
Это, как говорится, не имеет смысла для большинства приложений, если ExecutorService
ведет себя так, как вы беспокоитесь. Было бы гораздо разумнее, если бы каждый рабочий поток сохранил свой результат в объекте Future
, который был возвращен клиенту, а затем забудьте о результате и забудьте о Future
и перейдите к следующей задаче.
IF вот как он будет реализован, и если код также забыл о Future
, то Future
и результат, как будут собраны с помощью GC, и это будет конец.
Это реализация, которая имела бы смысл для меня. Вы можете видеть сами, как ThreadPoolExecutor
класс в проекте OpenJDK на самом деле делает это путем анализа исходного кода:
http://hg.openjdk.java.net/jdk8/jdk8/jdk/file/687fd7c7986d/src/share/classes/java/util/concurrent
Я взял быстрый быстрый взгляд, но у меня нет времени, чтобы изучить его углубленных ,
Как я сказал в своем комментарии (выше), я бы написал тест и узнал сам, если бы у меня возникли сомнения.
_I означает, что поток в пуле потоков никогда не сможет повторно использоваться, так как его результат не получен. Вы можете описать поведение, о котором вы здесь думаете? –
Это то, что вы можете легко проверить: создать фиксированный пул потоков, отправить больше запросов, чем количество потоков, и посмотреть, что произойдет. –
@SotiriosDelimanolis, спасибо за ответ и проголосуйте. Я полагаю, если пул потоков имеет размер 5, если я отправляю 5 потоков, не получая результат, могу ли я представить 6-й поток? Это вопрос. –