После прочтения кучу вопросов/статей по этой теме для меня все еще остается одна вещь.Относительно летучих и синхронизированных
Из того, что я понимаю (и, пожалуйста, исправьте меня, если я ошибаюсь), значение переменной может быть кэшировано локально в поток, поэтому, если один поток обновляет значение этой переменной, это изменение может быть не видно другой поток. Использование volatile
заключается в том, чтобы по существу заставить все потоки считывать значение переменной из того же места. Кроме того, во всей литературе по этой теме говорится, что синхронизация по этой переменной будет иметь тот же эффект.
Моя проблема заключается в том, что ничто из того, что я читал, никогда не заявляет, что синхронизация на переменной приведет к такому же поведению, но часто предоставляет пример кода, в котором указано, что в следующих двух случаях значение, которое считывается из переменная будет в курсе:
volatile int x;
...
int y = x;
и
final Object lock = new Object();
int x;
...
synchronized(lock) {
int y = x;
}
вопрос заключается в том, то: это тот случай, когда синхронизация по любой произвольной переменной заставит каждого ва доступный в синхронизированном блоке для доступа к самому последнему значению этой переменной?
Не могу ответить на ваш вопрос, но я должен сказать, что ваше название ... является эпическим. Заставляет меня думать о том, как Толкин открыл «Властелин колец», «Что касается хоббитов». – StormeHawke