赞
踩

AtomicBoolean ab = new AtomicBoolean(true);
ab.compareAndSet(true,false); //比较然后赋值,如果旧值为 true,就设置为 false,设置成功才返回 true,否则返回 false,单个 CAS 就结束
ab.weakCompareAndSet(true,false); //目前和 compareAndSet 方法一模一样
ab.get(); //获取最新的值(因为有 volatile 修饰)
ab.getAndSet(true); //循环 CAS 获取最新的值,并赋为 true
ab.lazySet(false); //内部调用unsafe.putOrderedInt() 方法,这个是普通的设置int,值未必立刻回写到主存
ab.set(true); //立即set,因为内部的 value 属性被 volatile 修饰
AtomicInteger ai = new AtomicInteger(0); ai.getAndIncrement(); //获取旧值,并加1,内部 CAS 循环加1,直到成功 ai.incrementAndGet(); //加1,并获取新值,内部 CAS 循环加1,直到成功 ai.getAndDecrement(); //获取旧值,并减1,内部 CAS 循环减1,直到成功 ai.decrementAndGet(); //减1,并获取新值,内部 CAS 循环减1,直到成功 ai.getAndAdd(2); //获取旧值,并加2,内部 CAS 循环加2,直到成功 ai.addAndGet(2); //加2,并获取新值,内部 CAS 循环加2,直到成功 ai.getAndAccumulate(6,Math::max); //循环 CAS 设置 二元运算后的值。二值运算的第一位是获取到的最新值,第二位是设置的值(6) ai.accumulateAndGet(4,(x,y)->{ //和上面的区别只是,最后返回的值是 二元运算后的值 return x+y; }); ai.getAndUpdate(Math::abs); //循环 CAS 设置 一元运算后的值,获取的是旧值 ai.updateAndGet((x)->{ //循环 CAS 设置 一元运算后的值,获取的是新值 return x*x; }); ai.get(); //获取最新的值(因为有 volatile 修饰) ai.getAndSet(2); //循环 CAS 获取最新的值,并设置属性为2 ai.set(3); //设置属性为2 ai.compareAndSet(1,2); //如果属性为1,则设置为2。成功返回 true。否则返回 false ai.lazySet(3); //ab.lazySet(false) ai.weakCompareAndSet(3,3); //目前和 compareAndSet() 方法一样
实现数组中元素的原子性更新操作
AtomicArray 类内部维护一个 final 修饰的 array 数组
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。