2013-03-31 2 views
0

Если у меня есть класс, содержащий приватный булевский метод, созданный с помощью метода setter и getter , мне нужно будет установить эти методы как синхронизированные, если я хочу читать и писать в , что булево из разных потоки?Доступ к булевому в многопоточной среде

+0

У вас есть? Нет. Но вы можете этого захотеть. В этом случае синхронизация геттера и сеттера может быть недостаточной для защиты вас, в зависимости от того, к каким другим данным обращаются оба потока. Вам действительно нужно дать нам намного больше информации о том, что каждый поток делает, чтобы хорошо ответить. –

ответ

0

Да, создание сеттеров и приемников синхронизировано - хорошая идея. Чтение или запись логического значения не является атомной командой, поэтому в редких случаях это может вызвать некоторые проблемы. (вы не можете быть уверены, что вы читаете форму RAM или cashe). Если это не изменчиво.

+0

+1 для «Чтение или запись логического значения не является атомарным». Но это верно даже для летучих, поскольку простые назначения могут приводить к нескольким инструкциям JVM и к тому уровню, на котором должна учитываться синхронизация. – sgp15

3

Синхронизация доступа простого значения часто не требуется. Как правило, все, что вам нужно, это отметить его volatile, который является менее ограничительным и более информативным.

Все это действительно сильно зависит от того, как вы получаете доступ к значению.

В некоторых случаях использование AtomicBoolean может быть наилучшим подходом. Это дает несколько иные гарантии для volatile.

См. Вопрос Java: volatile boolean vs AtomicBoolean вопрос для получения более подробной информации.

Смежные вопросы