Java - потокобезопасность неизменяемого массива

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

10
задан Tamás 28 July 2013 в 18:20
поделиться