-
发展至JDk1.8,基本类型原子类有以下几个:
AtomicBoolean、AtomicInteger、AtomicLong、DoubleAccumulator、DoubleAdder、LongAccumulator、LongAdder
-
大致可以归为3类
AtomicBoolean、AtomicInteger、AtomicLong 元老级的原子更新,方法几乎一模一样 DoubleAdder、LongAdder 对Double、Long的原子更新性能进行优化提升 DoubleAccumulator、LongAccumulator 支持自定义运算
package com.xdclass.atomic.demo1; import java.util.concurrent.atomic.AtomicInteger; public class Demo1 { private static AtomicInteger sum = new AtomicInteger(0); public static void inCreate(){ sum.incrementAndGet(); } public static void main(String[] args) { for(int i=0;i<10;i++){ new Thread(() -> { for(int j=0;j<10;j++){ inCreate(); System.out.println(sum);; } }).start(); } } }
package com.xdclass.atomic.demo1; import java.util.concurrent.atomic.LongAccumulator; public class Demo2 { public static void main(String[] args) { //输入一个数字,如果比上一个输入的大,则直接返回,如果小则返回上一个 LongAccumulator longAccumulator = new LongAccumulator((left,right)-> left > right ? left :right,0L ); longAccumulator.accumulate(3L); System.out.println(longAccumulator.get()); longAccumulator.accumulate(5L); System.out.println(longAccumulator.get()); longAccumulator.accumulate(2L); System.out.println(longAccumulator.get()); } }