AtomicInteger.incrementAndGet() vs. AtomicInteger.getAndIncrement()

2022-08-31 17:34:09

当返回值不感兴趣时,当忽略返回值时,AtomicInteger.getAndIncrement()AtomicInteger.incrementAndGet() 方法之间是否存在任何(甚至在实践中无关紧要)差异?

我正在考虑一些差异,比如哪个会更习惯用语,哪些会减少CPU缓存的负载,或者其他任何东西,任何东西可以帮助决定使用哪一个比扔硬币更合理。


答案 1

由于没有给出实际问题的答案,以下是我基于其他答案(谢谢,投票)和Java惯例的个人意见:

incrementAndGet()

更好,因为方法名称应以描述操作的谓词开头,而此处的预期操作仅递增。

以动词开头是常见的 Java 约定,官方文档也描述了这一约定:

“方法应该是动词,在第一个字母小写的情况下混合大小写,每个内部单词的第一个字母大写。


答案 2

代码本质上是相同的,因此无关紧要:

public final int getAndIncrement() {
    for (;;) {
        int current = get();
        int next = current + 1;
        if (compareAndSet(current, next))
            return current;
    }
}

public final int incrementAndGet() {
    for (;;) {
        int current = get();
        int next = current + 1;
        if (compareAndSet(current, next))
            return next;
    }
}

推荐