notify在java,notify()调用的位置重要吗?(Java)

Suppose I have the following situation:

synchronized void someMethod() {

...

try {

wait();

}catch(InterruptedException e) {

System.out.println("InterruptedException caught");

}

...

}

and

synchronized void someOtherMethod() {

...

notify();

}

And the Thread accesses first someMethod, goes into wait and then someOtherMethod notifies it and returns to Runnable state. Does the position of the notify() call in the method matter? I noticed no change in behavior even when I positioned the notify() call at different positions inside the method.

Shouldn't the Thread be notified immediately when the call to notify() is made?

解决方案

The position of the notify() call within the synchronized block does not matter because by definition, if you are still in the synchronized block, then you still hold the lock.

Shouldn't the Thread be notified immediately when the call to notify() is made?

Yes. Calling notify() puts one of the threads (if any) from the wait queue (waiting for the condition) into the blocked queue (waiting for the lock). This does happen immediately, but the awoken thread needs to get the lock before it can start running. So it is immediately moved out of the wait queue but is still waiting to get the lock.

Btw, I would recommend writing this as this.wait() and this.notify() just to be explicit about which object is being affected.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值