Сегодня я отправил вопрос о шаблоне потока, и почти все предлагали мне заглянуть в ExecutorService.
Пока я изучал ExecutorService, мне кажется, что я что-то упускаю. Что произойдет, если в службе есть запущенные или заблокированные потоки, и кто-то вызывает ExecutorService.shutdown(). Что происходит с запущенными или заблокированными потоками?
Ожидает ли ExecutorService завершения этих потоков перед завершением?
Причина, по которой я спрашиваю об этом, заключается в том, что давным-давно, когда я баловался Java, они устарели Thread.stop(), и я помню, что правильный способ остановки потока состоял в том, чтобы использовать семпахоры и расширять Thread при необходимости:
public void run () {
while (!this.exit) {
try {
block();
//do something
} catch (InterruptedException ie) {
}
}
}
public void stop () {
this.exit = true;
if (this.thread != null) {
this.thread.interrupt();
this.thread = null;
}
}
Как ExecutorService обрабатывает запущенные потоки?