原子数组
原子数组有AtomicIntegerArray
、AtomicLongArray
、AtomicReferenceArray
,主要是用来对数组中的某个元素进行原子操作。三个类的方法基本类似,这里只介绍一下AtomicIntegerArray
的方法。
AtomicIntegerArray
两个构造方法,第一个构造方法传入数组长度初始化一个所有值都为0
的数组,第二个构造方法直接传入一个数组来进行初始化。
1
2
|
public AtomicIntegerArray( int length) public AtomicIntegerArray( int [] array) |
先获取数组中索引为i
的值,然后对它进行加1
1
|
public final int getAndIncrement( int i) |
先获取数组中索引为i
的值,然后对它进行减1
1
|
public final int getAndDecrement( int i) |
先对数组中索引为i
的值进行加1
,然后获取新值
1
|
public final int incrementAndGet( int i) |
先对数组中索引为i的值进行减1,然后获取新值
1
|
public final int decrementAndGet( int i) |
先对数组中索引为i
的值进行加delta
,然后获取新值
1
|
public final int addAndGet( int i, int delta) |
先获取数组中索引为i的值,然后对它进行加delta
1
|
public final int getAndAdd( int i, int delta) |
先获取数组中索引为i
的值,然后把它设置为newValue
1
|
public final int getAndSet( int i, int newValue) |
先获取数组中索引为i
的值,然后执行指定的操作对其进行更新
1
|
public final int getAndUpdate( int i, IntUnaryOperator updateFunction) |
先执行指定的操作对其进行更新,然后获取新值
1
|
public final int updateAndGet( int i, IntUnaryOperator updateFunction) |
原子更新器
原子更新器有AtomicIntegerFieldUpdater
、AtomicLongFieldUpdater
、AtomicReferenceFieldUpdater
,它们的作用是对某个对象的某个属性进行原子操作,同样三个类的操作基本相同,只是属性的类型不同而已,这里以AtomicIntegerFieldUpdater
为例介绍基本方法。
AtomicIntegerFieldUpdater
类中提供了一个静态方法来创建对象,两个参数分别是tclass
:要操作的类,fieldName
:要操作的类的属性名
1
2
|
public static <U> AtomicIntegerFieldUpdater<U> newUpdater(Class<U> tclass, String fieldName) |
先获取对象obj
的属性fieldName
的值,然后对其进行自增1
操作
1
|
public int getAndIncrement(T obj) |
先获取对象obj
的属性fieldName
的值,然后对其进行自减1
操作
1
|
public int getAndDecrement(T obj) |
先把对象obj
的属性fieldName
的值进行自增1
,然后获取新值
1
|
public int incrementAndGet(T obj) |
先把对象obj
的属性fieldName
的值进行自减1
,然后获取新值
1
|
public int decrementAndGet(T obj) |
先获取对象obj
的属性fieldName
的值,然后对其加delta
1
|
public int getAndAdd(T obj, int delta) |
先把对象obj
的属性fieldName
的值加delta
,然后获取新值
1
|
public int addAndGet(T obj, int delta) |
先获取对象obj
的属性fieldName
的值,然后把它的值设为newValue
1
|
public int getAndSet(T obj, int newValue) |
先获取对象obj
的属性fieldName
的值,然后执行指定的操作把更新它的值
1
|
public final int getAndUpdate(T obj, IntUnaryOperator updateFunction) |
原子累加器
原子累加器LongAdder
是jdk1.8
新增的一个类,它的作用和AtomicInteger
、AtomicLong
类似,但是在多线程情况下它的性能要高很多,原因是LongAdder
维护了一个Cell
数组,累加操作时每个线程对其中一个数据进行操作,最后再把结果进行汇总,提高了并发性。
LongAdder
无参构造方法什么也没有做,默认累加器的结果就是0
1
|
public LongAdder() |
sum
方法就是对Cell
数组中各单元的值进行求和,然后返回当前累加器的值
1
|
public long sum() |
累加器自增1
1
|
public void increment() |
累加器自减1
1
|
public void decrement() |
累加器加x
1
|
public void add( long x) |
累加器的值重置为0
1
|
public void reset() |
先获取累加器的值,然后再重置为0
1
|
public long sumThenReset() |
以上就是详解Java并发编程之原子类的详细内容,更多关于Java并发原子类的资料请关注服务器之家其它相关文章!
原文链接:https://juejin.cn/post/7225569023828328503