java wait 释放锁_java – Thread.join()是否释放锁?还是继续坚持下去?

wait释放保持在调用wait的对象上的监视器,但不释放任何其他监视器.

The current thread must own this object’s monitor. The thread releases ownership of this monitor and waits […].

换句话说,给出以下内容:

synchronized (a) {

synchronized (b) {

b.wait();

}

}

在b.wait(),当前线程释放b的监视器,但不释放监视器.

如果t.join()是在内部使用t.wait()实现的,则t的监视器在等待时释放,但不会释放任何其他监视器.

顺便说一下,这种连接实现是leaky abstraction的情况.如果Thread使用私有的最终Object监视器;相反,我们可以说join没有发布监视器,即使它在内部使用等待而我们不知道.没有理由记录使用wait的实现细节,因为监视器对我们来说是不可访问的,所以我们不需要知道它.

我们知道join在内部使用wait的原因是最初编写方法的人选择了一个我们可以访问的监视器.这就需要揭示实现细节. join不是真的应该从我们的角度发布监视器,只是等待一个线程完成,但是选择了一个实现,这需要我们比我们应该知道更多.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值