Это очень простое приложение печатает «Hello», но не завершает работу. Я не вижу абсолютно никаких причин, почему это должно быть.
JavaDoc, завершение раздела, говорит, что
Пул, на который больше нет ссылок в программе И в котором нет оставшихся потоков, будет автоматически закрыт.
tpe
явно не упоминается, это означает, что поток не заканчивается. Но я не понимаю, почему. Может ли кто-нибудь объяснить?
Решение в этом случае состоит в том, чтобы вызвать shutdown() в конце main, но мое фактическое приложение более сложное. Новая работа генерируется внутри 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");
}
});
}
}