Согласно этой странице вам придется ее кодировать, чтобы вести себя так, как вы хотите. Использование нити над вашим сном будет прервано и ваша нить выйдет. В идеале вы должны повторно генерировать исключение, чтобы независимо от того, какой поток был запущен, он мог предпринять соответствующие действия.
Если вы не хотите, чтобы это произошло, вы можете поместить все это в некоторое время (true) цикл. Теперь, когда происходит прерывание, сон прерывается, вы едите исключение и зацикливаетесь, чтобы начать новый сон.
Если вы хотите завершить 3 секунды сна, вы можете приблизить его, скажем, 10 снов по 300 миллисекунд и оставить счетчик цикла вне цикла while. Когда вы видите прерывание, съешьте его, установите флаг «Я должен умереть» и продолжайте петлю, пока вы не выспитесь. Затем вы прерываете поток контролируемым образом.
Вот один из способов:
public class ThreadThing implements Runnable {
public void run() {
boolean sawException = false;
for (int i = 0; i < 10; i++) {
try {
//do something
Thread.sleep(300);
//do something after waking up
} catch (InterruptedException e) {
// We lose some up to 300 ms of sleep each time this
// happens... This can be tuned by making more iterations
// of lesser duration. Or adding 150 ms back to a 'sleep
// pool' etc. There are many ways to approximate 3 seconds.
sawException = true;
}
}
if (sawException) Thread.currentThread().interrupt();
}
}