Java энергозависимый модификатор и синхронизировал блоки

Переменная, к которой получают доступ несколько потоков, но только в синхронизируемых блоках, нуждайтесь в энергозависимом модификаторе? В противном случае, почему?

15
задан Ravindra babu 6 November 2016 в 16:41
поделиться

3 ответа

Вам не нужно использовать volatile внутри synchronized, synchronized уже гарантирует правильное поведение для локального кэширования переменных при последовательном использовании (при каждом обращении).

volatile работает с примитивными значениями и может быть удобным ярлыком для атомарного доступа к примитивному типу. Обратите внимание, что поведение volatile изменилось в JDK 5 по сравнению с 1.4.

Больше информации можно найти здесь

12
ответ дан 1 December 2019 в 04:00
поделиться

Нет. Когда вы работаете внутри синхронизированного блока, все кэшированные переменные синхронизируются при доступе, поскольку создается барьер памяти.

Для подробностей смотрите сравнение (с обсуждением) volatile с synchronized.

4
ответ дан 1 December 2019 в 04:00
поделиться

Блоки, синхронизирующиеся с одним и тем же объектом (или методом), гарантированно не будут выполняться одновременно. Итак, , пока вы синхронизируете с одним и тем же объектом , ваша переменная никогда не будет иметь одновременного доступа, поэтому она не требует особой обработки.

Если ваш доступ не синхронизирован, значит, у вас состояние гонки. Создание переменной изменчивой может быть правильным для некоторых примитивных переменных (я откладываю другие сообщения для получения более подробной информации о volaitle). Если это бесполезно, у вас почти наверняка есть ошибка.

2
ответ дан 1 December 2019 в 04:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: