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