Java - использование volatile имеет смысл только в многопроцессорных системах? - PullRequest
3 голосов
/ 05 января 2011

Использование volatile имеет смысл только в многопроцессорных системах. это неправильно?

Я пытаюсь узнать о программировании потоков, поэтому, если вы знаете какие-либо хорошие статьи / PDF-файлы ... мне нравятся вещи, в которых немного говорится о том, как работает операционная система, а не только синтаксис языка.

Ответы [ 4 ]

10 голосов
/ 05 января 2011

Нет.Volatile может использоваться в многопоточных приложениях.Они могут работать или не работать на более чем одном процессоре.

8 голосов
/ 05 января 2011

volatile используется для того, чтобы все потоки видели одну и ту же копию данных. Если есть только один поток для чтения / записи в поле, он не должен быть изменчивым. Это будет работать просто отлично, только немного медленнее.

В Java вы не очень хорошо представляете архитектуру процессора, обычно вы говорите с точки зрения потоков и многопоточности.

Я предлагаю Java Concurrency на практике, это хорошо, независимо от вашего уровня знаний, http://www.javaconcurrencyinpractice.com/

Смысл использования Java в том, что вам не нужно знать большинство деталей того, как работают потоки и т. Д. Если вы узнаете много вещей, которые вы не используете, вы, вероятно, забудете об этом. ;)

1 голос
/ 05 января 2011

Нет.Volatile используется для поддержки параллелизма.В определенных обстоятельствах его можно использовать вместо синхронизации.

Эта статья Брайана Гетца действительно помогла мне понять volatile.В нем есть несколько примеров использования volatile и объясняется, при каких условиях его можно использовать.

1 голос
/ 05 января 2011

Volatile имеет смысл в многопоточной программе, запуск этих потоков на одном процессоре или на нескольких процессорах не имеет значения. Ключевое слово volatile используется, чтобы сообщить JVM (и используемой им модели памяти Java), что он не должен переупорядочивать или кэшировать значение переменной с этим ключевым словом. Это гарантирует, что потоки, использующие переменную volatile, никогда не увидят устаревшую версию этой переменной.

См. эту ссылку на модель памяти Java в целом для получения более подробной информации. Или этот один для информации о Volatile.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...