首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java线程notify()方法

Java线程notify()方法
EN

Stack Overflow用户
提问于 2014-02-04 12:48:15
回答 5查看 81关注 0票数 0

假设有两个线程正在等待执行同步块。现在有机会了,在这种情况下,我真的需要调用notify()吗?我认为当同步块执行完成时,其他线程会释放锁吗?notify()方法的确切用法是什么?

请线程专家解释一下?

EN

回答 5

Stack Overflow用户

发布于 2014-02-04 13:00:51

不,在这种情况下,您不需要使用notify()。您是正确的,必须等待获取锁的线程将在锁被释放后自动继续。

notify()方法与wait()方法一起工作。当一个线程调用wait()时,它可能会释放锁并开始等待。结束等待的条件之一是当另一个线程调用notify()时。必须在当前线程为synchronized的实例上同时调用wait()notify()

例如,这可用于在两个线程之间创建通道,其中一个线程正在使用另一个线程产生的信息。如果消费者耗尽了要处理的信息,它可能会wait(),直到生产者执行一个notify(),表明有更多的数据可用。

票数 1
EN

Stack Overflow用户

发布于 2014-02-04 12:50:21

当线程进入同步块并调用wait时,进入同步块时获得的锁被释放,线程等待其他线程通知它,在这种情况下,它将重新获得锁,并且当线程离开同步块时,proceed.Lock再次被释放。

票数 0
EN

Stack Overflow用户

发布于 2014-02-04 12:50:49

doc

唤醒正在等待此对象的监视器的单个线程。如果有任何线程正在等待这个对象,则选择其中一个线程进行唤醒。这种选择是任意的,由实现决定。线程通过调用其中一个wait方法在对象的监视器上等待。

因此,如果一个对象正在等待,可以调用一个wait方法。然后,您可以使用notify唤醒它们。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21544140

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档