服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Java教程 - 详解Java并发编程之原子类

详解Java并发编程之原子类

2023-04-28 18:18bright丶 Java教程

这篇文章主要为大家介绍了Java并发编程之原子类介绍,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

原子数组

原子数组有AtomicIntegerArrayAtomicLongArrayAtomicReferenceArray,主要是用来对数组中的某个元素进行原子操作。三个类的方法基本类似,这里只介绍一下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)

原子更新器

原子更新器有AtomicIntegerFieldUpdaterAtomicLongFieldUpdaterAtomicReferenceFieldUpdater,它们的作用是对某个对象的某个属性进行原子操作,同样三个类的操作基本相同,只是属性的类型不同而已,这里以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)

原子累加器

原子累加器LongAdderjdk1.8新增的一个类,它的作用和AtomicIntegerAtomicLong类似,但是在多线程情况下它的性能要高很多,原因是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

延伸 · 阅读

精彩推荐