Мне нужно выполнить некоторую работу по очистке, когда я собираюсь завершить зацикленную нить. Например, сохранение буфера, чтобы я мог продолжить позже.
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
Так, как лучше всего это реализовать?
- Использовать флаг: Но проблема в том, что если resumeCalculation () занимает (EDIT: длительное время)
навсегда до конца?
- Поместите исключение в калькулятор, как?
- Могу ли я использовать прослушиватели событий или что-то еще? Я думал, что они были использованы для графических интерфейсов
- Просто прекрати это? И класс Thread включает в себя некоторый деконструктор, который будет вызываться, когда поток завершается, и я мог бы выполнить обработку там?
РЕДАКТИРОВАТЬ владельцем:
Я знаю, что могу использовать флаг. Но учтите это:
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();
между каждой строкой?
Я просто хочу выбросить полуобработанные результаты и сохранить предыдущие.