В этой статье developerWorks developerWorks developerWorks:
"Когда-нибудь допустимо усвоить прерывание, когда вы знаете, что поток вот-вот выйдет. Этот сценарий возникает только тогда, когда класс, вызывающий прерывистый метод, является частью
Thread
, а неRunnable
[...]".
Я всегда реализовал Runnable
для своих потоков. Предоставление реализации Runnable
следующим образом:
public class View() implements Runnable {
@Overload
public void run(){
Thread worker = new Thread(new Worker());
worker.start();
do{
try{
TimeUnit.SECONDS.sleep(3);
updateView();
}catch(InterruptedException e){
worker.interrupt();
// Thread.currentThread().interrupt();
return;
}
}while(true);
}
protected void updateView(){
// …
}
}
Действительно ли нужно позвонить Thread.currentThread().interrupt();
прямо перед моим оператором return;
? Неужели return;
уже выполняет очищенный выход enaugh? Какая польза назвать это? В статье говорится, что это должно быть сделано, потому что иначе "[...] код выше в стеке вызовов не сможет узнать об этом [...]". Какая польза от потока в Thread.State.TERMINATED
с прерванным флагом, установленным над ним без него при завершении работы приложения? Можете ли вы привести мне пример, где код вне Runnable
проверяет прерванный флаг по разумной причине?
BTW, это лучший дизайн кода для расширения Thread
вместо реализации Runnable
?