好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

详解Java并发编程之原子类

原子数组

原子数组有 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

查看更多关于详解Java并发编程之原子类的详细内容...

  阅读:16次