Мне нужно выполнить некоторую очистку, когда я собираюсь закончить цикл. Например, сохранение буфера, чтобы я мог продолжить позже.Как я могу закончить замкнутый подпоток в Java?
PseudoCode:
private class CalculatePI(Byte[] resume) implements Runnable{
public void Run(){
while(true){
resume=resumeCalculating(resume);
}
}
}
Thread calculator= new Thread(new CalculatePI(Byte[] resume));
Thread.sleep(200);
//And now I want to kill calculator
Так что лучший способ реализовать это?
- Используйте флаг: Но проблема в том, что если resumeCalculating() принимает (EDIT: долгое время)
навсегдадо конца? - Включить исключение в калькулятор, как?
- Могу ли я использовать прослушиватели событий или что-то еще? Я думал, что они использовались для графических интерфейсов
- Просто остановите его? И Class Thread включает какой-то деконструктор, который будет вызываться, когда поток прекращается, и я мог бы обработать там?
EDIT Владелец:
Я знаю, что я могу использовать флаг. Но подумайте:
public void Run(){
while(true){
resume=calculate_stepone(resume); //takes one minute
resume=calculate_steptwo(resume); //takes two minutes
resume=calculate_stepthree(resume); //takes three minutes
resume=calculate_steplast(resume); //takes four minutes
}
}
ставит if(flag) saveResultsAndExit();
между каждой линией практической или красивая? Я просто хочу отбросить полученные результаты и сохранить предыдущие результаты.
Да, я думаю, что это ответ, большое спасибо – TiansHUo
, просто не забывайте, что 'interrupted()' также очищает * прерванный статус *, поэтому последующие вызовы возвращают 'false'. –