Да, поток, усыплённый с помощью Thread.sleep(), можно разбудить, вызвав метод interrupt() на объекте этого потока. Метод выбросит InterruptedException, и спящий поток проснётся и сможет обработать прерывание.
Когда interrupt() вызывается на спящем потоке:
InterruptedExceptiontry-catchpublic class ThreadInterrupt implements Runnable {
public void run() {
try {
Thread.sleep(Long.MAX_VALUE);
} catch (InterruptedException e) {
System.out.println("Thread interrupted and awakened!");
}
}
public static void main(String[] args) throws InterruptedException {
Thread myThread = new Thread(new ThreadInterrupt(), "myThread");
myThread.start();
System.out.println("Main thread sleeping for 10 seconds");
Thread.sleep(10000);
System.out.println("Interrupting myThread");
myThread.interrupt();
}
}
interrupt() — стандартный способ разбудить спящий потокInterruptedExceptionstop() или suspend()Вызов interrupt() на спящем потоке немедленно завершит поток без необходимости писать код обработки исключений.
Новый — ещё не проверен сообществом
Вы