概念一 wait set,wait ,notify
可以理解为一个 休息室,每一个对象都有一个wait set
针对对象调用wait()方法 会使当前对象释放对象锁 进入wat set
如果wat set 里面只有一个处于等待的线程 任何地方调用notify 就会唤醒这个线程
如果wait set 里面有很多线程 那么调用notify 会在notify中挑选一个线程唤醒 调用notifyall 则唤醒所有的线程
唤醒了不一定会立即执行 因为如果其他线程可能持有对象锁 唤醒的线程只能等待当前线程释放对象锁后在竞争
wait还有一个重载方法 wait(long mi);表示 调用该方法进入wait set 但是指定时间到了 自动唤醒
若是没有锁定的线程 调用notify 等 会抛出IllegelMonitorStateException
一般选择 notifyAll 虽然比notify处理速度慢
但是nofify 你必须对所有线程 比较了解 才能控制
所以一般情况下选择notifyAll 比较保险