PositiveAtomicCounter(正数原子递增器-用于

2021-06-23  本文已影响0人  小胖学编程

当int类型到达2147483647时,在+1操作,会得到什么值?该值是否可以用于路由的轮询操作?

1. int类型到达2147483647的+1操作

image.png

当达到2^31-1时,在+1操作,得到的是-2^31

2. 0x7FFFFFFF的&操作

该操作保证了2^31-1时,在+1操作后依旧从0开始。

image.png

3. 正数原子递增器实现原理

import java.util.concurrent.atomic.AtomicInteger;

/**
 * 正数的原子递增器,主要用于实现轮询
 *
 */
public class PositiveAtomicCounter {

    private static final int MASK = 0x7FFFFFFF;
    private final AtomicInteger atom;

    public PositiveAtomicCounter() {
        atom = new AtomicInteger(0);
    }

    public final int incrementAndGet() {
        return atom.incrementAndGet() & MASK;
    }

    public final int getAndIncrement() {
        return atom.getAndIncrement() & MASK;
    }

    public int get() {
        return atom.get() & MASK;
    }


    public static void main(String[] args) {
        AtomicInteger atom = new AtomicInteger(2147483647);
        System.out.println(atom.incrementAndGet() & MASK);
    }
}
上一篇 下一篇

猜你喜欢

热点阅读