Страницы

Поиск по вопросам

четверг, 2 января 2020 г.

В чем разница volatile и static?

#java


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

А volatile в свою очередь создается с новым созданным объектом и при обращении к
ней из разных потоков он возвращает самое свежее значение своего объекта.

Запутанно объяснил наверное, но вот как то так я понял...

Не знаю насколько принципиальная разница...
    


Ответы

Ответ 1



volatile означает, что чтение и запись переменной с данным квалификатором является атомарной операцией, при этом любое изменение такой переменной будет видно из других потоков. static никак не связано с многопоточностью, этот модификатор указывает, что переменная не принадлежит объекту, она ассоциирована с классом/интерфейсом. Операции над static-переменными не являются потокобезопасными. При этом каждый поток может работать со своей копией статической переменной (если она не объявлена как volatile) - соответственно без синхронизации изменения в такую переменную могут быть не видны другим потокам.

Комментариев нет:

Отправить комментарий