关于wait和notify的一些疑问
1、notify与notifyAll的具体区别是啥?notify是随机选择一个线程来唤醒它,其他的还是处于WAITING状态,notifyAll()唤醒所有等待该对象监视锁的线程,让它们去竞争该对象的锁。对于这两种方式,最终都是一个线程获得监视锁,但是具体实现上有什么不同呢?有什么情况是用notify优于使用notifyAll的?
2、所谓的spurious wakeup是指什么?有没有例子说明一下?
3、这点是关于一个由于调用对象的wait方法进入WAITING状态的线程,最后被唤醒又再可以被CPU调度时(不管是因为什么变为可以被CPU调度的)所发生的事:这个线程被从wait set中移除,又去和其他线程抢夺监视锁,获得锁后恢复现场(不知道这里说恢复现场对不对?)我想知道所谓获得锁是什么意思?就是获得了一块内存吗?
4、wait函数是什么时候返回的?是调用wait后马上返回还是再这个线程再次获得监视锁后返回,然后又对while的条件进行检测(我觉得是后者)
5、notify和notifyAll也会释放锁吧?会不会有那种场景:那个调用notify(或notifyAll)后,紧接着这个语句后面还执行其他语句?比如:notify(); other_statement;