在线程通信中使用Notify()

时间:2013-09-05 11:52:59

标签: java multithreading thread-safety

Object类的方法wait()notify()用于线程间通信。当调用wait()时,用于同步的对象放弃其锁定,但是当调用notify时,在同步块完成之前不会释放锁定。

那么,有什么用notify()功能?即使它不存在,同步块也会完成并释放锁定权限吗?

3 个答案:

答案 0 :(得分:2)

notify()负责唤醒等待的线程,即。从等待队列中获取线程以运行队列。也就是说,调度程序可以安排等待线程。

答案 1 :(得分:2)

必须通知等待对象锁定的线程,他们希望锁定的对象现在是免费的,这是notify()notifyAll()方法的作用。

答案 2 :(得分:2)

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

enter image description here

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

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

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

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