#java #multithreading
#java #многопоточность
Вопрос:
Если run () не завершен и вызывается извне, мне нужно сначала завершить запущенный фрагмент.
public class EnvTime extends Thread {
public void run() {
long step = 2000 / benvelope1.length;
while (!finished) {
for (int i = 0; i < benvelope1.length; i ) {
envOut = benvelope1[i];
try {
Thread.sleep(step);
} catch (InterruptedException benvelope1) {
benvelope1.printStackTrace();
}
}
}
}
}
Итак, я вызываю этот код из другого метода с:
Env interpol;
interpol.interrupt(); //
interpol=new EnvTime();
interpol.start();
Но это не работает…
Ответ №1:
Неясно, чего вы пытаетесь достичь, но, выполняя
Env interpol;
interpol.interrupt(); //
вы, вероятно, получили бы NullPointerException
. Если вы хотите, чтобы ваш код достигал
} catch (InterruptedException benvelope1) {
...
}
вам нужно убедиться, что поток находится в try
-блоке, особенно в Thread.sleep
методе, когда вы его прерываете.
Другими словами, вам, по крайней мере, нужно запустить поток, прежде чем прерывать его.
Ответ №2:
Вам следует изменить finished
где-нибудь в своем коде. Вот так:
try {
Thread.sleep(step);
} catch (InterruptedException benvelope1) {
finished = true;
benvelope1.printStackTrace();
}
Возможно, вам также следует дождаться, когда поток действительно завершится, прежде чем запускать новый. Используйте join:
interpol.interrupt();
interpol.join();
interpol=new EnvTime();
interpol.start();
Комментарии:
1. спасибо, я попробую это. по какой-то причине я не могу дождаться завершения потока. Мне нужно принудительно завершить