java - 在同步代码段中使用 wait() 而不使用 notification() (java)

标签 java multithreading synchronization wait synchronized

我想知道是否可以在不使用notify()的情况下在同步代码段上使用wait(),如下所示:

wait_on(B):
    synchronized(B.monitor) {
    B.count--
        while (B.count > 0) { /* wait */ }
    }

提前致谢

最佳答案

您需要notify或notifyAll来将线程从等待状态唤醒。在您的示例中,代码将进入等待状态并停留在那里(除非被中断)。

了解 wait、yield 和 sleep 之间的区别。 wait需要在synchronized block 中调用,一旦进入wait,锁就会被释放,并且线程将保持该状态直到调用notify。 Yield 将线程返回到就绪池,并让调度程序决定何时再次运行它。 sleep 意味着线程 hibernate 一段固定的时间(然后进入就绪池)。

确保您在正在同步的同一个对象上调用 wait(这里是 B.monitor)。

关于java - 在同步代码段中使用 wait() 而不使用 notification() (java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10234598/

相关文章:

java - 如何将 RabbitMQ 库添加到项目中? 'The import "com.rabbitmq“无法解析”

java - Criteria.list() 期间出现 org.hibernate.TransientObjectException

java - JAXB - 无法获取某些对象信息

java - MongoDB - Spring Data - 在保存条件时增加字段

C++ win32线程createThread函数没有正确传递参数

c++ - std::threads 构造函数参数错误

java嵌套Map数据结构读写操作

algorithm - 哪个集群节点应该处于事件状态?

java - 在更新删除和插入时将电话簿联系人与我的应用程序同步的最佳方式

synchronization - rsync 可以支持一对多同步吗?