我无法理解slideshare幻灯片15中提到的以下代码
MyObject obj = new MyObject();
synchronized(obj) {
obj= new MyObject();
// no longer synchronizing on the same object
}
}
最佳答案
在MyObject obj的第一个声明中,“ obj”对象已分配给MyObject的新实例。
进入同步块,java自己保留对“ obj”的引用,以用作锁定对象。
在同步块内,程序所保存的引用已重新定义为MyObject的另一个新实例。此时,指向MyObject原始实例的原始引用已丢失,并由对MyObject的新实例的引用替换。
使用'obj'出现的任何其他同步块将锁定在该对象的新实例上,而不是旧实例上,从而不再在同一对象上进行同步。
为了防止出现此类问题,我通常将所有锁定对象标记为最终对象,以防止意外重新定义。
关于java - 在同一个对象上同步有问题吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19262749/