gpt4 book ai didi

java - 同步块(synchronized block)内的同步块(synchronized block)

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:39:13 25 4
gpt4 key购买 nike

我可以在另一个同步块(synchronized block)中包含同步块(synchronized block)以同步另一个对象吗?

例子:

synchronized(myObjetc1){
// code
synchronized(myObjetc2){
// code
}
}

如果是这样,它仍然是一种正确的技术还是风险太大?

最佳答案

如果你在其他地方以相同的顺序同步就好了。

如果其他线程要执行下面的代码

synchronized(myObjetc2){
// code
synchronized(myObjetc1){
// code
}
}

你可能会陷入僵局。

假设上面的变量引用相同的对象,请考虑以下情况。第一个线程(您的代码)将监视器锁定在 myObjetc1 上。线程调度程序切换线程上下文。第二个线程(上面的代码)将监视器锁定在 myObjetc2 上。线程调度程序切换线程上下文。第一个线程尝试锁定 myObjetc2 上的监视器。它必须等待,因为第二个线程有它。线程调度程序切换上下文。第二个线程尝试锁定 myObjetc1 上的监视器。它必须等待,因为第一个线程有它。繁荣!死锁。

关于java - 同步块(synchronized block)内的同步块(synchronized block),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22386012/

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