Сначала ваш фрагмент даже не компилируется: вам не хватает скобок, Thread.currentThread - это метод, а не переменная экземпляра. Затем вы вызываете Thread.interrupted () в вашем методе doSomething? Если да: очищает прерванное состояние потока, так что ожидание не будет прервано и currentThread (). IsInterrupted () вернет false.
Вам также не нужно перепроверять прерванное состояние в предложении while или повторно прерывать поток после его прерывания. Это выглядит лучше (и ловит исключение, которое может сделать ваш doSomething):
public synchronized void run() {
try {
while (!someCondition()) {
doSomething();
wait(SOME_TIME);
}
} catch (InterruptedException ie) {
logger.error(ie);
} catch (Exception e) {
logger.error(e);
}
}
@ Питер: пробуй и лови, хотя это определенно хорошее предложение!