gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-11-01 01:55:14 26 4
gpt4 key购买 nike

假设我有以下情况:

synchronized void someMethod() {
...
try {
wait();
}catch(InterruptedException e) {
System.out.println("InterruptedException caught");
}
...
}

synchronized void someOtherMethod() {
...
notify();
}

Thread首先访问someMethod,进入wait,然后someOtherMethod通知它并返回Runnable 状态。 notify() 调用在方法中的位置重要吗?即使我将 notify() 调用定位在方法内的不同位置,我也没有注意到行为发生变化。

当调用notify() 时,是否应该立即通知Thread

最佳答案

notify()的位置在synchronized内调用 block 重要,因为根据定义,如果您仍在 synchronized 中 block ,那么你仍然持有锁。

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

是的。打电话notify()将等待队列(等待条件)中的一个线程(如果有)放入阻塞队列(等待锁)。这确实会立即发生,但被唤醒的线程需要在开始运行之前获得锁。因此它立即被移出等待队列,但仍在等待获取锁。

顺便说一句,我建议将其写为 this.wait()this.notify()只是为了明确哪个对象受到影响。

关于java - notify() 调用的位置重要吗?(Java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11544941/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com