Необязательно использовать ключевое слово volatile - это опасно? - PullRequest
0 голосов
/ 24 июня 2018

Есть ли какой-либо вред в создании переменной "volatile" в Java, если на самом деле ее не нужно помечать как volatile?... или это просто "излишне", как я часто читал.

Как кто-то, увлекающийся многопоточностью, но не мастер компьютерных наук, я в настоящее время согласен с "если сомневаюсь, сделайте этолетучий ".

Ответы [ 2 ]

0 голосов
/ 24 июня 2018

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

Правильные блоки синхронизации все еще необходимы. Ваш подход по своей сути несовершенен. Извините, но не так-то просто обеспечить безопасность потоков.

Третья проблема - это делает истинную цель вашего кода более неясной. Если все переменные помечены как изменчивые, то как читатель узнает, какие из них действительно зависят от этого свойства, а какие нет? Такая неясность создает скрытую стоимость бремени обслуживания кода, также известного как «технический долг».

0 голосов
/ 24 июня 2018

Это может повлиять на производительность, но это все.

Может быть и другая опасность: вы заставляете себя думать, что, поскольку все изменчиво, ваш код поточно-ориентирован. Это не так, и ничто не заменит реального понимания потоковых последствий вашего кода. Если вы сделаете это, вам не нужно будет пометить переменные вещи «на всякий случай».

Но к вашему непосредственному вопросу: нет, вы никогда не возьмете функционально правильный код и не нарушите его, заставив переменную нарушать.

...