我知道在一個與多線程一起工作的程序中,有必要對這些方法進行同步,因爲它可能存在類似競爭條件的問題。
但我不明白爲什麼我們需要同步只需要讀取共享變量的方法。
請看下面的例子:
多線程:鎖定獲取並設置
public ConcurrentIntegerArray(final int size) {
arr = new int[size];
}
public void set(final int index, final int value) {
lock.lock();
try {
arr[index] = value;
} finally {
lock.unlock();
}
}
public int get(final int index) {
lock.lock();
try {
return arr[index];
} finally {
lock.unlock();
}
}
他們做的get,也對set方法看看。
在設置的方法我明白爲什麼。例如,如果我想把Thread1放在索引= 3的數字5和幾毫秒後,Thread2必須放入索引= 3的數字6.
這是否可以發生,我在索引= 3在我的數組仍然是一個5而不是6(如果我沒有在方法集上進行同步)?
這是因爲Thread1可以有一個開關上下文,所以Thread2在同一個方法中輸入值,並且Thread1在同一個位置上賦值5因此而不是6我有一個5.
但是我不明白爲什麼我們需要(看例子)同步方法get。
我在問這個問題,因爲我們只需要讀取內存,而不是寫入。
那麼爲什麼我們還需要在方法上進行同步?有人能給我一個非常簡單的例子嗎?
請同時參閱[AtomicIntegerArray](http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/atomic/AtomicIntegerArray.html) – TwoThe