1

Object 类的方法wait()和方法notify()用于线程间通信。当wait()被调用时,用于同步的对象放弃它的锁,但是当调用通知时,锁直到同步块完成才被释放。

那么,notify()函数有什么用呢?即使它不存在,同步块也会完成并释放锁,对吗?

4

3 回答 3

2

notify()负责唤醒等待线程,即。将线程从等待队列转移到运行队列。也就是等待线程可以被调度器调度。

于 2013-09-05T11:57:18.507 回答
2

java.lang.Object.notify()唤醒在此对象的监视器上等待的单个线程。如果有任何线程正在等待该对象,则选择其中一个被唤醒。该选择是任意的,并由实施自行决定。线程通过调用其中一个等待方法在对象的监视器上等待。

在此处输入图像描述

此方法只能由作为该对象监视器所有者的线程调用。线程通过以下三种方式之一成为对象监视器的所有者:

  • 通过执行该对象的同步实例方法。


  • 通过执行在对象上同步的同步语句的主体。

  • 对于 Class 类型的对象,通过执行该类的同步静态方法。

于 2013-09-05T12:22:48.943 回答
2

必须通知等待锁定对象的线程他们希望锁定的对象现在是空闲的,这就是方法notify()notifyAll()方法所做的。

于 2013-09-05T11:59:30.443 回答