Object wait与notify使用
使用时切记:必须由同一个lock对象调用wait、notify方法
当线程A执行wait方法时,该线程会被挂起;
当线程B执行notify方法时,会唤醒一个被挂起的线程A;
lock对象、线程A和线程B三者是一种什么关系?
可以想象一个场景:
lock对象维护了一个等待队列list;
线程A中执行lock的wait方法,把线程A保存到list中;
线程B中执行lock的notify方法,从等待队列中取出线程A继续执行;
(1).wait() //释放锁,进入等待
等待对象的同步锁,需要获得该对象的同步锁才可以调用这个方法,否则编译可以通过,但运行时会收到一个异常:IllegalMonitorStateException。
调用任意对象的 wait() 方法导致该线程阻塞,该线程不可继续执行,并且该对象上的锁被释放。
(2).notify() //唤醒其它争夺权限的线程
唤醒在等待该对象同步锁的线程(只唤醒一个,如果有多个在等待),注意的是在调用此方法的时候,并不能确切的唤醒某一个等待状态的线程,
而是由JVM确定唤醒哪个线程,而且不是按优先级。
调用任意对象的notify()方法则导致因调用该对象的 wait()方法而阻塞的线程中随机选择的一个解除阻塞(但要等到获得锁后才真正可执行)。
版权声明:如无特殊标注,文章均为本站原创,转载时请以链接形式注明文章出处。
评论