2016-06-25 1 views
-3

Мне задали этот вопрос во время интервью. Я не делаю случай, кроме многопоточности.Интервью: есть ли другое место, где мы можем использовать слово летучих ключей, отличное от многопоточности?

+2

...... нет ....... – shmosel

+0

http://docs.oracle.com/javase/tutorial/essential/concurrency/atomic.html – Paul

+1

Звучит как трюк в каком-то вопросе –

ответ

3

Вы можете объявить переменную volatile, независимо от того, выполняете ли вы что-либо с несколькими потоками, но вне многопоточности это действительно не полезно и сделает чтение и запись этой переменной медленнее без заметного выигрыша.

0

Только Поведение volatile в Java Language Specification (JLS) относится к модели памяти Java (JMM). Поскольку JMM все зависит от того, будет ли и когда один поток видит результаты операции памяти, выполняемой другим потоком, то простой «Нет» будет правильным ответом на этот вопрос. (На мой взгляд.)

Кроме того, что «может использовать» и «должно использовать» разные слова на английском языке. Поэтому педант может указать, что вы «можете» использовать volatile в объявлениях полей, где есть только один поток, когда-либо собирающийся использовать это поле. Ты можешь это сделать. Это разрешено ... но это бессмысленно.


Другая вещь, чтобы отметить, что volatile вызывает нативный компилятор кода испускать различные последовательности кода. Эти кодовые последовательности могут привести к тому, что ваш код будет вести себя по-разному в контексте, который JLS/JMM будет рассматривать как вне сферы видимости. Например, может быть актуальным, если вы (каким-то образом) сопоставляете поля объектов в регистры аппаратных устройств с отображением памяти или тому подобное.

Однако все это выходит за рамки языка Java, как указано в JLS. И определенно не переносная. И не имеет отношения к нормальным программам Java/программистам.