Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

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

public class ThreadSafe   
  {  
    private int x;  
    public void setX(int x)  
          {
           this.x = x;
           } 
  }

Ответ 3

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

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

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