Какие операции в Java считаются атомарными?
какие операции в Java считаются атомарными?
3 ответов
- все назначения примитивных типов, за исключением long и double
- все задания ссылок
- все задания volatile переменных
- все операции java.параллельный.Atomic * classes
и, может быть, что-то еще. Посмотри jls.
как отмечается в комментариях, атомарность не подразумевает видимость. Таким образом, в то время как другой поток гарантированно не видит частично написанного int
, Это может не увидеть новое значение.
операции на long и double находятся на общих 64-битных процессорах атомные а также, хотя нет никакой гарантии. Смотрите также это запрос.
в Java чтение и запись 32-разрядных или меньших величин гарантированно являются атомарными.
Под атомарным мы подразумеваем, что каждое действие происходит в один шаг и не может быть прервано. Таким образом, когда мы имеем многопоточные приложения, операции чтения и записи потокобезопасны и их не нужно синхронизировать.
например, следующий код является потокобезопасным:
public class ThreadSafe
{
private int x;
public void setX(int x)
{
this.x = x;
}
}
Это Кажется что назначения лонгов являются атомарными, на основе этого метода в AtomicLong.java:
public final void set(long newValue) {
value = newValue;
}
обратите внимание на отсутствие синхронизации.