您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

谁能解释线程监视器并等待?

谁能解释线程监视器并等待?

如果对象在调用Object.wait()时不拥有对象监视器,则在释放监视器之前,它将无法访问该对象以设置通知侦听器。而是将其视为尝试访问同步对象上的方法的线程。

或者换句话说,两者之间没有区别:

public void doStuffOnThisObject()

和以下方法

public void wait()

在释放对象监视器之前,这两种方法都将被阻止。这是Java中的一项功能,可防止一个以上的线程更新对象的状态。它只是对wait()方法产生了意想不到的后果。

大概,wait()方法未同步,因为这可能会导致Thread在对象上具有多个锁的情况。(有关此信息,请参阅Java语言规范/锁定。)多个锁是一个问题,因为wait()方法只会撤消一个锁。如果该方法是同步的,则可以确保仅撤消该方法的锁,同时仍保留潜在的外部锁。这将在代码中创建死锁条件。

要回答有关Thread.sleep()的问题,Thread.sleep()不保证您正在等待的任何条件都得到满足。使用Object.wait()和Object.notify()允许程序员手动实现阻塞。发送通知已满足条件后,线程将解除阻塞。例如,从磁盘的读取已完成,并且线程可以处理数据。Thread.sleep()将要求程序员轮询是否已满足条件,如果不满足则返回睡眠状态。

其他 2022/1/1 18:32:15 有531人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶