D
Wenn ein Thread gerade schläft, dann sollte er eigentlich sofort eine InterruptedException werfen, wenn du interrupt() aufrufst. Mancht er das nicht, dann ist was falsch. (nicht die richtige sleep-Methode oder so...)
So ist es normalerweise jedenfalls kein Problem:
public void run()
{
while (!isInterrupted()) {
doSomething();
try {
sleep(mySleepTime);
} catch (InterruptedException ex) {
/* Dieser Teil hier sollte normalerweise eigentlich sofort
* aufgerufen werden, wenn der Thread mittels interrupt beendet
* wird und gerade schlief.
*/
interrupt();
}
}
}
Dazu noch ein kleiner Auszug aus der APIDoc:
//Beschreibung der Methode interrupt()
If this thread is blocked in an invocation of the wait(), wait(long), or wait(long, int) methods of the Object class, or of the join(), join(long), join(long, int), sleep(long), or sleep(long, int), methods of this class, then its interrupt status will be cleared and it will receive an InterruptedException.
Eventuell könnte auch ein th.join() was bringen, nachdem man den Thread mittels th.interrupt von 'außerhalb' beendet hat.