Какие операции в Java считаются атомными?

Какие операции в Java считаются атомными?

+68
источник поделиться
3 ответа
  • все назначения примитивных типов, за исключением длинных и двойных
  • все назначения ссылок
  • все назначения изменчивых переменных
  • все операции java.concurrent.Atomic * classes

и, возможно, нечто большее. Посмотрите jls.

Как отмечается в комментариях, атомарность не подразумевает видимость. Поэтому, в то время как другой поток гарантированно не видит частично написанного int, он никогда не увидит новое значение.

Операции с длинными и двойными находятся на общих 64-битных ЦП атомных, а, хотя нет никакой гарантии. См. Также этот запрос функции.

+85
источник

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

Например, следующий код является безопасным потоком:

public class ThreadSafe   
  {  
    private int x;  
    public void setX(int x)  
          {
           this.x = x;
           } 
  }
+4
источник
другие ответы

Связанные вопросы


Похожие вопросы

Казалось бы, назначения longs являются атомарными, основанными на этом методе в AtomicLong.java:

public final void set(long newValue) {
    value = newValue;
}

Обратите внимание на отсутствие какой-либо синхронизации.

0
источник

Посмотрите другие вопросы по меткам или Задайте вопрос