Какие операции в Java считаются атомарными?
какие операции в Java считаются атомарными?
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; } }