У меня есть вопрос относительно модели памяти 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 гарантирует, что значение конечных полей будет видно другим потокам после построения. Но я хочу, чтобы другие потоки увидели самую последнюю версию данных, хранящихся в массиве после построения.
Конечно, приведенный выше код - просто простой пример, представляющий проблему, на самом деле я хочу реализовать простой кеш для прямых байтовых буферов, и я не хотел бы полагаться на некоторые классы Collection. В настоящее время я использую ReentrantReadWriteLock для обеспечения правильного поведения, но я бы хотел избежать его, если это возможно.