我有一个关于 Java 内存模型的问题。这是一个提出问题的简单类:
public class ImmutableIntArray {
private final int[] array;
public ImmutableIntArray() {
array = new int[10];
for (int i = 0; i < 10; i++) {
array[i] = i;
}
}
// Will always return the correct value?
public int get(int index) {
return array[index];
}
}
据我所知,JMM 保证 final 字段的值在构造后对其他线程可见。但我想确保其他线程在构建后会看到存储在数组中的最新版本的数据。
当然上面的代码只是一个简单的例子,实际上我想为直接字节缓冲区实现一个简单的缓存,我不想依赖一些 Collection 类。目前我正在使用 ReentrantReadWriteLock 来确保正确的行为,但如果可能的话,我想避免它。