Это супер простое приложение печатает «Hello», но не заканчивается. Я не вижу абсолютно никакой причины, почему это должно быть.Приложение ThreadPoolExecutor не завершает
JavaDoc, раздел финализации, говорит, что
пула, который больше не упоминается в программе и у него не осталось потоков не будет отключение автоматически.
tpe
, очевидно, не имеет ссылок, это означает, что нить не заканчивается. Но я не понимаю, почему. Может ли кто-нибудь объяснить?
Решение в этом случае должно вызвать shutdown() в конце основного, но мое фактическое приложение сложнее. Внутри Runnables создается новая работа, поэтому я не знаю, когда все будет обработано.
Итак, мне нужно выяснить, когда вызывать выключение? Или можно каким-то образом указать, что, когда tpe
в очереди пуст, он должен закрыться?
public class JavaApplication5 {
public static void main(String[] args) {
ThreadPoolExecutor tpe = new ThreadPoolExecutor(5, 15, 10, TimeUnit.SECONDS, new LinkedBlockingQueue<Runnable>());
tpe.execute(new Runnable() {
@Override
public void run() {
System.out.println("Hello");
}
});
}
}
Продолжайте читать до конца. Вы должны убедиться, что неиспользуемые нити умирают. –