java1.8中的原子操作的类在包java.util.concurrent.atomic下面,全部包括如下:
- AtomicBoolean
- AtomicInteger
- AtomicIntegerArray
- AtomicIntegerFieldUpdater
- AtomicLong
- AtomicLongArray
- AtomicLongFieldUpdater
- AtomicMarkableReference
- AtomicReference
- AtomicReferenceArray
- AtomicReferenceFieldUpdater
- AtomicStampedReference
- DoubleAccumulator
- DoubleAdder
- LongAccumulator
- LongAdder
java1.8对原子类进行了扩充,是它们其中一些更加高效,新增加的类如下,具体情况会在后边提到:
- DoubleAccumulator
- DoubleAdder
- LongAccumulator
- LongAdder
根据修改的数据类型,可以将JUC包中的原子操作类可以分为4类。
1. 基本类型: AtomicInteger, AtomicLong(LongAdder),DoubleAdder, AtomicBoolean ;
2. 数组类型: AtomicIntegerArray, AtomicLongArray, AtomicReferenceArray ;
3. 引用类型: AtomicReference, AtomicStampedRerence, AtomicMarkableReference ;
4. 对象的属性修改类型: AtomicIntegerFieldUpdater, AtomicLongFieldUpdater, AtomicReferenceFieldUpdater 。
这些类存在的目的是对相应的数据进行原子操作。所谓原子操作,是指操作过程不会被中断,保证数据操作是以原子方式进行的。
Accumulator Example:
package com.car.test;
import java.util.concurrent.atomic.DoubleAccumulator;
import java.util.function.DoubleBinaryOperator;
public class maints {
public static void main(String[] args) {
DoubleBinaryOperator accumulatorFunction = new DoubleBinaryOperator() {
@Override
public double applyAsDouble(double left, double right) {
// TODO Auto-generated method stub
return left+right;
}
};
double identity = 0;
DoubleAccumulator accumulator=new DoubleAccumulator(accumulatorFunction, identity);
accumulator.accumulate(5);
accumulator.accumulate(2.5);
accumulator.accumulate(3);
System.out.println(accumulator.get());
System.out.println(accumulator.floatValue());
System.out.println(accumulator.intValue());
System.out.println(accumulator.longValue());
}
}