說我有下面的代碼:當決定使用易失性時,實際的鎖是否重要?
private Integer number;
private final Object numberLock = new Object();
public int get(){
synchronized(number or numberLock){
return Integer.valueOf(number);
}
}
我的問題是,做add
方法以下版本需要有number
揮發性在下面的情況:
public void add(int num){
synchronized(number)
number = number + num;
}
public void add(int num){
synchronized(numberLock)
number = number + num;
}
我知道這些都是原子操作,但我的問題是,價值是number
guarennteed被推送到全局內存,並可以在不使用volatile的情況下對所有線程可見?
在數字上同步可能不是一個好主意,Integer對象(可以)被緩存,所以這會阻止其他代碼在同一個數字上同步。 – Jim 2012-02-06 15:44:49
@Jim真的,只是想做一個簡單的例子:) – Shawn 2012-02-06 15:46:05