Jon*_*her 3 java concurrency synchronization
说你有这个代码:
private Object lockObject = new Object();
private Integer myValue = new Integer(0);
public void update(){
synchronized(lockObject){
System.out.println(myValue);
myValue++;
}
}
Run Code Online (Sandbox Code Playgroud)
现在,myValue既不是synchronized开启也不是标记volatile.但是,改变它的唯一方法是使用该update()方法.DZone对核心java并发性的refcard说,所有线程都可以看到同步块中字段的更新.我不确定这是指仅同步对象(lockObject)还是任何字段(如myValue).
任何人都可以详细说明这个吗?谢谢!
保证同步块内的所有字段更新对其他线程可见,只要它们在读取之前也在同一对象上同步.只要您同步对共享可变状态的所有访问,您应该看到所有更新.
或者,如果你真的只有一个柜台,请使用AtomicInteger:)