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


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

3 71

3 ответа:

  • все назначения примитивных типов, кроме long и double
  • все задания ссылок
  • все задания volatile переменных
  • все операции java.параллельный.Атомарные * классы

и, возможно, что-то еще. Посмотрите на jls.

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

операции на long и double выполняются на общих 64-битных процессорах атомные а также, хотя нет никакой гарантии. Смотрите также это запрос.

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

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

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

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

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

обратите внимание на отсутствие синхронизации.