如果两个对象是同一类的实例,它们的大小相同,那么我能否使用sun.misc.Unsafe来用一个对象覆盖另一个对象?
编辑: 我的意思是“覆盖”第一个对象,然后用第二个对象填充内存。这可能吗?
编辑: 我的意思是“覆盖”第一个对象,然后用第二个对象填充内存。这可能吗?
A = objectB;
。您甚至可以使用Unsafe.compareAndSwapObject(...)
使其原子化。Unsafe.compareAndSwapObject(...)
,因为只有A1会指向对象B,而A2和A3仍将指向对象A。这不是原子的。public class AtomicReferenceChange {
public static Object myReference = new Object();
public static void changeObject(Object newObject) {
myReference = newObject;
}
public static void main(String[] args) {
System.out.println(AtomicReferenceChange.myReference);
AtomicReferenceChange.changeObject("333");
System.out.println(AtomicReferenceChange.myReference);
}
}
不要多次引用同一对象,您可以定义一个公共静态引用,并让您的代码在所有地方使用AtomicReferenceChange.myReference
。如果您想以原子方式更改引用的对象,请使用静态方法changeObject(...)
。