Ситуация следующая:
Вопрос: Должен ли я сделать все переменные этого класса изменчивыми или нет?
Проблемы:
Примечание: Я знаю о шаблоне компоновщика, но не могу применить его там по ряду других причин: (
EDITED: Поскольку мне кажется, что два ответа Матиаса и axtavt не очень хорошо совпадают, я хотел бы добавить пример:
Допустим, у нас есть класс foo
:
class Foo {
public int x=0;
}
и два потока используют его, как описано выше:
// Thread 1 init the value:
Foo f = new Foo();
f.x = 5;
values.add(f); // Publication via thread-safe collection like Vector or Collections.synchronizedList(new ArrayList(...)) or ConcurrentHashMap?.
// Thread 2
if (values.size()>0){
System.out.println(values.get(0).x); // always 5 ?
}
Как я понял, Матиас, он может распечатать 0 на некоторой JVM в соответствии с JLS. Как я понял axtavt всегда будет печатать 5.
Каково ваше мнение?
- С Уважением, Дмитрий