Я хочу знать отношение между синхронизированным и финальным в JAVA. Я прочитал несколько статей, и все упоминают, что следует инициализировать объект в конструкторе, используя поля final, иначе неинициализированные объекты могут вызвать проблемы синхронизации между несколькими потоками, использующими один и тот же объект.
Для. например приведенный ниже код:
class FinalFieldExample {
final int x;
int y;
static FinalFieldExample f;
public FinalFieldExample() {
x = 3;
y = 4;
}
static void writer() {
f = new FinalFieldExample();
}
static void reader() {
if (f != null) {
int i = f.x;
int j = f.y;
}
}
}
Читатель может правильно прочитать значение x, но может прочитать значение y как 0, поскольку оно не объявлено окончательным.
Почему это происходит?
main()
, который показывает поведение, о котором вы заявляете, создавая таким образом SSCCE - person Bohemian♦   schedule 24.02.2013