使用wait的时候,什么要使用while

使用wait的时候,什么要使用while:

  • 你或许有多个任务为同样的原因等待同样的锁, 并且第一个唤醒的任务或许已经改变了情况(甚至你不这么做,但是继承你的类可以这么做)。如果是这种情况,那么这个task就应该被暂停,直到满足条件。

  • 当这个任务从它的等待状态中唤醒的时候,可能其他的任务已经改变了状态,以致于这个任务不能运行。只能继续等待。

  • 还有情况是你的object lock可能被多种原因在等待(在这种情况下,你就必须用notifyAll()).这种情况下,你需要检查是否唤醒的是否正确,如果不是对应的唤醒,那么就必须继续wait()

此外:

什么是object monitor?

根据jdk 7的api来看:

This method should only be called by a thread that is the owner of this object’s monitor. A thread becomes the owner of the object’s monitor in one of three ways:

  • By executing a synchronized instance method of that object.
  • By executing the body of a synchronized statement that synchronizes on the object.
  • For objects of type Class, by executing a synchronized static method of that class.

Only one thread at a time can own an object’s monitor.

notify方法只能被这个object的monitor拥有者调用。一个线程有三种方法成为这个object的monitor:

  • 执行同一个instance的synchronized方法。
  • 执行同一个instance的synchronized的block。
  • 执行同一个Class, 执行静态的synchronized方法。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值