当线程t
调用对象u
上的wait()
方法时,它将进入等待状态,直到另一个线程调用同一对象u
上的notify()
或另一个线程调用等待线程t
上的interrupt()
方法。考虑到等待线程不消耗CPU周期,等待线程如何可能在wait()
内检查中断状态并抛出InterruptedException
?也就是说,我想象wait()
中的代码如下:
if (Thread.interrupted()) // Clears interrupted status!
throw new InterruptedException();
处于WAITING状态的线程必须被恢复才能再次变为RUNNABLE。
这个恢复是在较低的级别完成的,由通知或中断两者调用。
等待线程不执行任何代码。相反,中断标志被设置(在较低的级别),线程被恢复-状态为RUNNABLE -一旦它再次运行,中断状态被检查。