import java.util.concurrent.atomic.AtomicInteger; import java.util.function.IntUnaryOperator; /** * 使用cas实现updateAndGet()方法 */ public class test1 { public static void main(String[] args) { AtomicInteger i = new AtomicInteger(10); System.out.println("自己实现的updateAndGet()方法"); System.out.println(updateAndGet(i, value -> value / 2)); } public final static int updateAndGet(AtomicInteger i, IntUnaryOperator operator) { while (true) { int prev = i.get(); // int next = prev / 2; // 这里的表达式写死了,缺乏通用性 int next = operator.applyAsInt(prev); // 这里使用的Java8中的函数式编程,具体的运算取决于传入的函数接口 if (i.compareAndSet(prev, next)) { return next; } } } }
原文:https://www.cnblogs.com/xiazhenbin/p/14892260.html