2012-02-01 4 views
9

, если длинная переменная объявлена ​​как: -атомный приращение длинной переменной?

частный летучий длинный счетчик = 0;

теперь, если я увеличиваю его с помощью оператора pre-increment, тогда будет ли операция атомарной?

Если да, то будет ли оно более эффективным, чем java.util.concurrent.atomic.AtomicLong Приращение объекта ??

+7

с использованием оператора pre-increment не изменяет тот факт, что приращение является неатомной операцией. – mre

+0

как сказал mre, его не атомный. что происходит (в основном), это то, что значение загружается, а затем увеличивается, а затем увеличивающееся значение будет снова сохранено. поэтому он не является атомарным. взгляните на [это] (http://madbean.com/2003/mb2003-44/) – kmera

ответ

17

volatile ключевое слово только решает visibility проблема. Вы должны использовать AtomicLong или synchronized метод/блок для атомарности (Atomicity in concurrent programming). более

Одна статья, которая вышла сегодня: Demonstrating when volatile is required

+0

+1 Я узнал новый термин «Атомность». Я бы, наверное, сказал бы Атомность или Atomictudeinous. :-) – user949300

+2

@ user949300 Atomicity - это правильное слово, используемое в параллельном и dbms мире. –

+0

@Pangea Это просто «видимость» или «заказ»? – Chaitanya

3

Оператор Преинкремент является не атомарным. Кроме того, приращение volatile long, вероятно, будет менее эффективным, чем использование AtomicLong практически на всех платформах, поскольку последнее поддерживается аппаратным обеспечением.

2

Короткий ответ: Нет. Вам нужно будет синхронизировать метод, который увеличивает счетчик, или, предпочтительно, использовать AtomicLong.

Для записи операторы ++ не являются атомами даже для целых чисел.

2

Изменчивая переменная не совпадает с атомной переменной.

Для переменных volatile компилятор java попытается минимизировать команды перетасовки ради эффективности (не спрашивайте меня об этом), чтобы избежать проблем с параллелизмом.

Атомные переменные явно предназначены для атомных операций, например, в вашем случае приращение переменной атомарно.

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