public static void main(String[] args) throws Exception { Thread thread = new Thread(()->{ while(!Thread.currentThread().isInterrupted()){ System.out.println(Thread.currentThread().isInterrupted());
/*synchronized (o){ try { o.wait(); } catch (InterruptedException e) { e.printStackTrace(); Thread.currentThread().interrupt(); } }*/
try { Thread.sleep(10000); } catch (InterruptedException e) { e.printStackTrace(); Thread.currentThread().interrupt(); } } }); thread.start(); Thread.sleep(1000); thread.interrupt(); Scanner scanner = new Scanner(System.in); }
如果线程调用了自身的sleep,监控对象的wait()方法进入了timed_waiting状态。这时其他线程调用了处于timed_waiting状态的线程的interrupt()方法,会抛出InterruptedException,从而使线程提前结束TIMED-WATING状态。抛出异常前,会清除中断标识位,所以抛出异常后,调用isInterrupted()方法将会返回false。再次调用线程的interrupt()方法,重新设置线程的中断标识位,优雅的终止线程。