переменную из-за которой блокируем. Почему эту переменную не указывают volatile?
мы указываем не переменную из-за которой блокируем, а всего-лишь даем понять synchronized блоку с монитором какого объекта он должен работать
А почему не нужно указывать volatile?
потому что volatile никакого отношения к блокировке на мониторе не имеет.
volatile нужно указывать, если мы хотим запретить процессору кешировать значение переменной, но к монитору и блокировке это не относится
Используя volatile переменная не будет оптимизироваться, потому что может изменяться другим потоком, это же может быть связано с synchronize
если вы собираетесь использовать эту переменную как разделяемую, то почему ее не нужно указывать как volatile? а вообще, вы же не на Java < 5 пишите, есть атомарные обертки, используйте их и не парьтесь с synchronized и volatile
Если доступ к переменной (чтение и запись) защищены замком, то volatile будет лишним
Потому что обычно поле по которому синхранизируемся должно быть final, чтобы разные потоки синхронизировались по одному объекту, а не по разным. А final volatile это запрещённая комбинация, поэтому volatile не ставят
Мне кажется я никогда final не писал для объекта синхронизации
А зря (если речь про поле, а не по локальную переменную). Разумеется, для самой синхранизации оно ничего не даёт, но оно даёт уверенность, что синхронизироваться будем по одному и тому же.
Объект по которому выполняется синхронизация очень рекомендуется делать всегда final. Вне зависимости от того, используется intrinsic lock или объект интерфейса Lock
Волатайл делает совсем не это
А что же, просвети?
Потому что эта конструкция и так подразумевает synchronizes-with
Он создаёт отношение synchronizes-with между операциями над тем, модификатором чего он является. Миф про кэш на ядре повторяют только те, кто а) не знают про cache coherency и что процы за редким исключением сами синхронизируют кэши и б) не понимают, что абстрактная спецификация языка не может таргетировать конкретное железо
Ок, спасибо, но нормальным людям это знать не нужно)
Обсуждают сегодня