> Java > java지도 시간 > 동시 프로그래밍을 위해 Java에서 원자 클래스를 사용하는 방법은 무엇입니까?

동시 프로그래밍을 위해 Java에서 원자 클래스를 사용하는 방법은 무엇입니까?

WBOY
풀어 주다: 2023-05-08 19:46:29
앞으로
1131명이 탐색했습니다.

原子数组

原子数组有AtomicIntegerArrayAtomicLongArrayAtomicReferenceArray,主要是用来对数组中的某个元素进行原子操作。三个类的方法基本类似,这里只介绍一下AtomicIntegerArray的方法。

AtomicIntegerArray

两个构造方法,第一个构造方法传入数组长度初始化一个所有值都为0的数组,第二个构造方法直接传入一个数组来进行初始化。

public AtomicIntegerArray(int length)
public AtomicIntegerArray(int[] array)
로그인 후 복사

先获取数组中索引为i的值,然后对它进行加1

public final int getAndIncrement(int i)
로그인 후 복사

先获取数组中索引为i的值,然后对它进行减1

public final int getAndDecrement(int i)
로그인 후 복사

先对数组中索引为i的值进行加1,然后获取新值

public final int incrementAndGet(int i)
로그인 후 복사

先对数组中索引为i的值进行减1,然后获取新值

public final int decrementAndGet(int i)
로그인 후 복사

先对数组中索引为i的值进行加delta,然后获取新值

public final int addAndGet(int i, int delta)
로그인 후 복사

先获取数组中索引为i的值,然后对它进行加delta

public final int getAndAdd(int i, int delta)
로그인 후 복사

先获取数组中索引为i的值,然后把它设置为newValue

public final int getAndSet(int i, int newValue)
로그인 후 복사

先获取数组中索引为i的值,然后执行指定的操作对其进行更新

public final int getAndUpdate(int i, IntUnaryOperator updateFunction)
로그인 후 복사

先执行指定的操作对其进行更新,然后获取新值

public final int updateAndGet(int i, IntUnaryOperator updateFunction)
로그인 후 복사

原子更新器

原子更新器有AtomicIntegerFieldUpdaterAtomicLongFieldUpdaterAtomicReferenceFieldUpdater,它们的作用是对某个对象的某个属性进行原子操作,同样三个类的操作基本相同,只是属性的类型不同而已,这里以AtomicIntegerFieldUpdater为例介绍基本方法。

AtomicIntegerFieldUpdater

类中提供了一个静态方法来创建对象,两个参数分别是tclass:要操作的类,fieldName:要操作的类的属性名

public static <U> AtomicIntegerFieldUpdater<U> newUpdater(Class<U> tclass,
                                                          String fieldName)
로그인 후 복사

先获取对象obj的属性fieldName的值,然后对其进行自增1操作

public int getAndIncrement(T obj)
로그인 후 복사

先获取对象obj的属性fieldName的值,然后对其进行自减1操作

public int getAndDecrement(T obj)
로그인 후 복사

先把对象obj的属性fieldName的值进行自增1,然后获取新值

public int incrementAndGet(T obj)
로그인 후 복사

先把对象obj的属性fieldName的值进行自减1,然后获取新值

public int decrementAndGet(T obj)
로그인 후 복사

先获取对象obj的属性fieldName的值,然后对其加delta

public int getAndAdd(T obj, int delta)
로그인 후 복사

先把对象obj的属性fieldName的值加delta,然后获取新值

public int addAndGet(T obj, int delta)
로그인 후 복사

先获取对象obj的属性fieldName的值,然后把它的值设为newValue

public int getAndSet(T obj, int newValue)
로그인 후 복사

先获取对象obj的属性fieldName的值,然后执行指定的操作把更新它的值

public final int getAndUpdate(T obj, IntUnaryOperator updateFunction)
로그인 후 복사

原子累加器

原子累加器LongAdderjdk1.8新增的一个类,它的作用和AtomicIntegerAtomicLong类似,但是在多线程情况下它的性能要高很多,原因是LongAdder维护了一个Cell数组,累加操作时每个线程对其中一个数据进行操作,最后再把结果进行汇总,提高了并发性。

LongAdder

无参构造方法什么也没有做,默认累加器的结果就是0

public LongAdder()
로그인 후 복사

sum方法就是对Cell数组中各单元的值进行求和,然后返回当前累加器的值

public long sum()
로그인 후 복사

累加器自增1

public void increment()
로그인 후 복사

累加器自减1

public void decrement()
로그인 후 복사

累加器加x

public void add(long x)
로그인 후 복사

累加器的值重置为0

public void reset()
로그인 후 복사

先获取累加器的值,然后再重置为0

public long sumThenReset()
로그인 후 복사

위 내용은 동시 프로그래밍을 위해 Java에서 원자 클래스를 사용하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:yisu.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿