首页 > 技术文章 > 自己实现updateAndGet()方法

xiazhenbin 2021-06-17 10:06 原文

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;
            }
        }
    }
}

 

推荐阅读