Страницы

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

четверг, 31 января 2019 г.

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

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


Ответ

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

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

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