synchronized & volatile
1) написано, что при входе в блок synchronized локальный кеш
считается недействительным и переменным присваиваются значения из
"main-memory". Выходит что переменной task вернётся то
значение, которое было у неё до этого:
class ... {
Task task = new Task();
public int exec() {
task = new Task();
synchronized () {...
2) что будет с переменной tmp, если после
её инициализации но до входа в блок synchronized значение x будет изменено другим потоком ?
int x = 10;
public int exec() {
int tmp = x;
Мне кажется здесь немного плутаница вишла: первий пример относительно переменной инстанса класа, а второй относительно простой переменной. Ну и результат будет мне кажеться соответственний: переменная инстанса класа только содержит посилание на инстанс + переменная task не локальная, а переменная tmp локальная. И я думаю, что в таком примере как ти написал, переменная tmp просто будет имет значение которим она била проинициализированная (10).
а вот по первому я нашёл источник, в котором было
написано, что локальные копии flash-аться, то есть
применются к "main-memory" а не наоборот.
Наверно "считается недействительным" - просто
плохой перевод слова flash.