我知道在一个与多线程一起工作的程序中,有必要对这些方法进行同步,因为它可能存在类似竞争条件的问题。
但我不明白为什么我们需要同步只需要读取共享变量的方法。
请看下面的例子:
多线程:锁定获取并设置
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