JUC包提供了一系列的原子性操作类,这些类都是使用非阻塞算法CAS实现的,相比使用锁实现原子性操作,这在性能上有很大的提高。
1、AtomicLong
JUC并发包中包含有AtomicInteger、AtomicLong和AtomicBoolean等原子性操作类,它们的原理类似。AtomicLong是原子性递增或者递减类,其内部使用Unsafe来实现。
多线程使用AtomicLong统计0的个数:
// 统计0的个数
public class Atomic {
// 创建Long型原子计数器
private static AtomicLong atomicLong = new AtomicLong();
// 创建数据源
private static Integer[] arrayOne = new Integer[] {0,1,2,3,0,5,6,0,56,0};
private static Integer[] arrayTwo = new Integer[] {10,1,2,3,0,5,6,0,56,0};
public static void main(String[] args) throws InterruptedException {
// 线程one统计数组arrayOne中0的个数
Thread threadOne = new Thread(new Runnable() {
@Override
public void run() {
int size = arrayOne.length;
for (int i=0;i<size;i++) {
if(arrayOne[i].intValue() &