整数计数器 - Max-Value时该怎么办?

And*_*nig 1 java

如何在使用整数计数器时解决最大值问题

counter = counter + 1;
Run Code Online (Sandbox Code Playgroud)

当达到最大值时,你怎么知道这发生了?你为这个计算增加了另一个计数器吗?

我的问题关注java.

ray*_*d09 7

您可以通过与Integer.MAX_VALUE进行比较来判断是否达到了最大值.

  • 有时候"简单就是最好的":) (2认同)

Tom*_*ine 5

对于快速饱和int增量(一个在达到 时停止MAX_VALUE),我想你可以写:

counters = (counter+1) + ((counter+1)>>31);
Run Code Online (Sandbox Code Playgroud)

或者

counters = (counter+1) - ((counter+1)>>>31);
Run Code Online (Sandbox Code Playgroud)

或者为了好玩,对于AtomicInteger,我认为:

private final AtomicInteger counter = new AtomicInteger(0);

public void increment() {
    int count;
    do {
        count = counter.get();
        if (count == Integer.MAX_VALUE) {
            return;
        }
    } while (!counter.compareAndSet(count, count+1));
}
Run Code Online (Sandbox Code Playgroud)