在下面的代码中,Java 是否会确保a
调用的线程可以看到最新的副本getAB()
?
我知道返回的值getAB()
可能与设置的不同setAB
,但Java会确保a
其他线程看到的值总是更新或与值一致b
吗?
public class Pair {
private int a;
private int b;
public Pair() {
super();
}
public void setAB(int a, int b) {
this.a = a;
synchronized (this) {
this.b = b;
}
}
public int[] getAB() {
int[] arr = new int[2];
arr[0] = a;
synchronized (this) {
arr[1] = b;
}
return arr;
}
}
后续问题:如果我们将arr[0] = a;
语句移到块之后会发生什么synchronized
?
像这样 ...
public int[] getAB() {
int[] arr = new int[2];
synchronized (this) {
arr[1] = b;
}
arr[0] = a;
return arr;
}