wait、notify与suspend、 resume 的关系

上一篇文章仔细分析了 wait、notify  与synchronzied 的关系。 

      wait()、notify() 当线程调用wait()方法后会进入等待队列(进入这个状态会释放所占有的所有资源,与阻塞状态不同),进入这个状态后,是不能自动唤醒的,必须依靠其他线程调用notify()notifyAll()方法才能被唤醒(由于notify()只是唤醒一个线程,但我们由不能确定具体唤醒的是哪一个线程,也许我们需要唤醒的线程不能够被唤醒,因此在实际使用时,一般都用notifyAll()方法,唤醒有所线程),线程被唤醒后会进入锁池,等待获取锁标记。 

      suspend() 、resume()两个方法配套使用,suspend()使得线程进入阻塞状态,并且不会自动恢复,必须其对应的resume()被调用,才能使得线程重新进入可执行状态。典型地,suspend() resume() 被用在等待另一个线程产生的结果的情形:测试发现结果还没有产生后,让线程阻塞,另一个线程产生了结果后,调用 resume()使其恢复。 

注意区别:

      初看起来wait()、notify() 方法suspend()、resume() 方法没有什么分别,但是事实上它们是截然不同的。

区别的核心在于: 

 suspend()在引起当前所在线程阻塞后,不会释放线程占用的锁(如果占用了的话),而wait() 和 notify() 这一对方法则相反。

      

猜你喜欢

转载自blog.csdn.net/u013394527/article/details/80602275