线程的一些基本操作wait set,wait ,notify,nofifyAll

概念一 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 比较保险

原文地址:https://www.cnblogs.com/liaomin416100569/p/9331993.html