wait的synchronized块是不是应该把zooKeeper.exists也包含进去?

wait的synchronized块是不是应该把zooKeeper.exists也包含进去?

当zooKeeper.exists执行完后,当前线程还没有wait,前序号的线程就unlock了,并且触发了当前线程的notify。这样会让当前线程一直处于wait状态

正在回答

登陆购买课程后可参与讨论,去登陆

1回答

你说的这个问题确实存在,但不是synchronized的问题,synchronized在这里并不是防并发,而是要执行wait。我们在调用锁的时候,多是new出一个新的对象,所以synchronized并不起作用。

在wait()方法中,传入过期时间是不是可以解决。

  • hehehei 提问者 #1
    我不是做java开发的,对synchronized的理解不知道对不对,当前情况下synchronized(this)都是用的this,是同一个对象,所以两个synchronized块是互斥的。我网查过wait为什么要用synchronized的资料,有的解释说原因之一就是要把执行wait的前提条件放入synchronized中,这样才可以避免wait执行之前执行notify
    2020-04-12 18:05:47
  • Java架构师讲师团 回复 提问者 hehehei #2
    你的理解是正确的,咱们调用锁的时候,都是new出新的对象,每一个线程,都会new出一个。所以这里的synchronized是不会有并发问题的。
    2020-04-12 18:26:29
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师