如果一个线程调用了共享变量的wait方法,那么该线程将会被挂起,它获取到的有关这个共享变量的锁也会被释放。前提是这个线程有获取到这个共享变量的锁,否则调用wait会抛异常IllegalMonitorStateException。wait方法还可以设置超时参数,超时自动返回。
这个被挂起的线程只有在被interrupt(抛InterruptException异常)或者其他拿到同一个共享变量的线程执行notify/notifyAll方法时才被唤醒,当然抛异常时是假唤醒。如果一个线程执行notifyAll方法,那么之前因为该线程共享变量而被挂起的线程都会返回,而如果是notify那么只会随机返回其中一个。当然这里执行notify/notifyAll的线程都需要先拿到这个共享变量的监视器锁。