如何在使用整数计数器时解决最大值问题
counter = counter + 1;
Run Code Online (Sandbox Code Playgroud)
当达到最大值时,你怎么知道这发生了?你为这个计算增加了另一个计数器吗?
我的问题关注java.
对于快速饱和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)
| 归档时间: |
|
| 查看次数: |
15574 次 |
| 最近记录: |