gpt4 book ai didi

java - 获取锁时重新分配对象变量

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

下面的代码是否有意义:

线程 A:

synchronized(mObj) {
return mObj.x;
}

线程 B:

synchronized(mObj) {
mObj = new Object();
}

特别是,是否保证两个同步部分始终互斥?

最佳答案

No synchronized 在这里没有正确实现。

每个对象在执行时都有一个锁,并获取锁并在完成后释放它,然后下一个线程将获取谁在等待它。

mObj = new Object();

重新分配新的对象会产生冲突。

假设一个场景——第一个线程 T1 正在通过获取锁来执行同步部分,而线程 t2 正在等待获取线程 T1 已获取的锁。现在线程 T1 使用新的 Object 重新分配 mObj 对象,并通过释放对象(旧对象)锁离开同步部分,线程 t2 现在能够获取锁并且进入同步块(synchronized block)。

此时如果线程 T3 正在尝试执行已同步的 block ,“线程 T3 是否能够获取锁?”。答案是肯定的。 synchronized(mObj) 现在 mObj 引用正在引用一个新对象,并且没有人获得锁,因此 T3 可以做到。所以这是矛盾的情况。

关于java - 获取锁时重新分配对象变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21981442/

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