gpt4 book ai didi

java - 在同一对象上同步有问题吗?

转载 作者:行者123 更新时间:2023-12-01 23:31:06 24 4
gpt4 key购买 nike

我无法理解slideshare第15张幻灯片中提到的以下代码

MyObject obj = new MyObject();
synchronized(obj) {
obj= new MyObject();
// no longer synchronizing on the same object
}
}

最佳答案

在第一次声明 MyObject obj 时,“obj”对象已被分配给 MyObject 的新实例。

进入同步块(synchronized block),java 持有对 'obj' 的引用,供其自身用作锁定对象。

在同步块(synchronized block)内,程序所持有的引用已被重新定义为 MyObject 的另一个新实例。此时,指向 MyObject 原始实例的原始引用已丢失,并被新的 MyObject 实例的引用所取代。

使用“obj”出现的任何进一步的同步块(synchronized block)都将锁定该对象的新实例而不是旧实例,因此不再在同一对象上同步。

为了防止出现此类问题,我通常将所有锁定对象标记为最终对象,以防止意外重新定义。

关于java - 在同一对象上同步有问题吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19262749/

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