Я опубликовал вопрос о шаблоне потока сегодня, и почти все предложили мне посмотреть на ExecutorService.
Пока я изучал ExecutorService, мне кажется, что я что-то упустил. Что происходит, если у службы есть запущенные или заблокированные потоки, и кто-то вызывает ExecutorService.shutdown (). Что происходит с потоками, которые работают или заблокированы?
Ожидает ли ExecutorService завершения этих потоков до его завершения?
Причина, по которой я спрашиваю об этом, состоит в том, что давным-давно, когда я занимался в Java, они устарели Thread.stop (), и я помню, что правильным способом остановки потока было использование sempahores и расширение 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 обрабатывает запущенные потоки?