Я знаю, почему использовать синхронизацию в Java, но я не могу найти ответ на этот вопрос:Atomic операция в JAVA
do I need to synchronized an atomic operation?
Если да, то почему?
Я знаю, почему использовать синхронизацию в Java, но я не могу найти ответ на этот вопрос:Atomic операция в JAVA
do I need to synchronized an atomic operation?
Если да, то почему?
Если это действительно атомный, то нет.
Для обеспечения согласованного состояния необходима синхронизация. Любая атомная операция приводит к состоянию cohernt по определению атомарного.
Вы должны быть уверены, что ваша атомная операция не распространяется на несколько операций чтения и обновления. Простые выражения, такие как операции приращения и декремента, расширяются на несколько действий, поэтому i ++ и i - не атомных операций. Таким образом, в большинстве случаев, если вы читаете и обновляете переменную из нескольких потоков, вам лучше использовать синхронизированные методы.
Подробнее: http://docs.oracle.com/javase/tutorial/essential/concurrency/atomic.html
Есть очень мало действительно атомарные операции в Java. Из Atomic Access Java Tutorial:
long
и double
).volatile
(включаяlong
10 и double
переменных).Обратите внимание, что синхронизация используется не только для взаимного исключения, но также необходима для надежной связи между потоками. Даже когда вы имеете дело с данными, которые могут быть легко читаемыми и доступными для записи, нет никакой гарантии, когда, если когда-либо, один поток увидит изменение, сделанное другим. По этой причине вам необходимо либо синхронизировать доступ к общим данным, либо убедиться, что общие переменные объявлены volatile
.
Если вы знаете, почему использовать синхронизацию на Java, вы должны быть в состоянии ответить на собственный вопрос. Подумайте, что означает, что операция является атомарной. –