我需要在Java中操作多个属性,同时保持它们的同步.
这段代码正确吗(据我所知,这是正确的):
class X {
private final Object lockObject = new Object();
private int a;
private boolean b;
private Y y;
public void doStuff(int i) {
synchronized (lockObject) {
a = i;
b = a == 8;
y.someMethod(b);
y = new Y(a, y);
}
}
}
这个synchronized
块是确保对所有属性的更新还是只写入锁定的属性(在这种情况下,锁定没有状态的最终对象没有真正的意义)?
或者我需要使用volatile
来确保所有线程上的内存可见性更新:
class X {
private final Object lockObject = new Object();
private volatile int a;
private volatile boolean b;
private volatile Y y;
public void doStuff(int i) {
synchronized (lockObject) {
a = i;
b = a == 8;
y.someMethod(b);
y = new Y(a, y);
}
}
}
事实上,我99%肯定第一个问题是正确的,但不是100%,谢谢你的回答.