gpt4 book ai didi

Java:wait()、notify() 和嵌套同步块(synchronized block)

转载 作者:行者123 更新时间:2023-11-30 03:32:30 24 4
gpt4 key购买 nike

这会起作用还是会导致死锁?

线程 1:

synchronized (globalLock) {
synchronized (o) {
o.wait();
}
}

线程 2(稍后):

synchronized (globalLock) {
synchronized (o) {
o.notify();
}
}

所以据我了解,o.wait()会释放o的锁,但是会释放globalLock的锁吗?可能不会,这会导致死锁?

最佳答案

正如评论中提到的,这很容易测试。是的,它确实会因为您猜测的原因而陷入僵局。

public static void main(String[] args) throws InterruptedException {
final Object globalLock = new Object();
final Object o = new Object();

new Thread(new Runnable() {
@Override
public void run() {
synchronized (globalLock) {
synchronized (o) {
try {
System.out.println("waiting");
o.wait();
} catch (InterruptedException ie) {
// no-op
}
}
}
}
}).start();

Thread.sleep(2000); // ensure thread above starts first

new Thread(new Runnable() {
@Override
public void run() {
synchronized (globalLock) {
synchronized (o) {
System.out.println("notifying");
o.notify();
}
}
}
}).start();
}

关于Java:wait()、notify() 和嵌套同步块(synchronized block),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28686202/

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