Я написал класс VideoProcessor, который выполняет тяжелую обработку видео.Если «запущено», создается новый поток, и ссылка сохраняется в поле videoProcessingThread .Теперь проблема заключается в следующем:
videoProcessingThread.interrupt();
Это, похоже, не имеет никакого эффекта, поскольку isInterrupted () никогда не оценивается как true.Я также добавил другие проверки прерываний, просто чтобы быть уверенным;но они тоже не "работают".Я реализовал обходной путь:
videoProcessingThread.kill();
Кажется, что это на самом деле «убивает» поток.Метод kill устанавливает для булевой переменной kill значение true, и оно вычисляется правильно, и поток возвращает.
videoProcessingThread = new Thread() {
boolean kill = false; // workaround
public void run() {
// init stuff
while (currentFrameIndex < totalFrames) {
if (isInterrupted()) {
System.out.println("isInterrupted");
return;
}
if (Thread.interrupted()) {
System.out.println("interrupted");
return;
}
if (Thread.currentThread().isInterrupted()) {
System.out.println("Thread.currentThread().isInterrupted()");
return;
}
if (kill) {
System.out.println("killed");
return;
}
}
// heavy processing
}
public void kill() {
kill = true;
}
}
Что я делаю не так?