В чем разница между ключевым словом volatile и static?

1

Статическая переменная сохраняет одно значение для потока, но volatile сохраняет одно значение для всех потоков (пример здесь)

Большинство констант сценария объявляются как статические, а также постоянные данные будут одинаковыми для всех потоков, поэтому почему константы не объявляются изменчивыми

когда мы можем использовать ключевое слово volatile в java

Теги:
multithreading

1 ответ

7
Лучший ответ

Я думаю, вы неправильно поняли как static и volatile.

static - это просто одно поле для всего типа. Он не имеет ничего общего с потоками - это просто о том, есть ли одно поле для типа (static) или одно поле для каждого экземпляра типа (non- static).

volatile - это то, что гарантии существуют, когда изменения, сделанные одним потоком, видны в других потоках. Это не имеет никакого отношения к тому, является ли поле статическим или нет. Из раздела 8.3.1.4 JLS:

Язык программирования Java позволяет потокам получать доступ к общим переменным (§17.1). Как правило, для обеспечения постоянного и надежного обновления общих переменных поток должен гарантировать, что он имеет исключительное использование таких переменных, получая блокировку, которая, как правило, обеспечивает взаимное исключение для этих общих переменных.

Язык программирования Java предоставляет второй механизм, изменчивые поля, который более удобен, чем блокировка для некоторых целей.

Поле может быть объявлено изменчивым, и в этом случае модель памяти Java гарантирует, что все потоки будут видеть согласованное значение для переменной (§17.4).

(Раздел 17.4 имеет гораздо более подробную информацию.)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню