Сегодня я опубликовал question о шаблоне нити, и почти все предложили мне посмотреть в 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 обрабатывает потоки?
Ничего в документации для shutdown() говорит, что поток будет прерван. Документация для shutdownNow() предполагает, что реализация может прервать выполняемые задачи, но не требует этого. – dty
Чтобы избежать путаницы, я отправил свой комментарий перед тем, как был отредактирован ответ, чтобы правильно соответствовать документации. – dty
@ Danny - вы можете просто удалить ваши комментарии ... –