У меня вопрос относительно модели памяти 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 для обеспечения правильного поведения, но я бы хотел избежать этого, если это возможно.