一旦达到最大值,如何将原子长整型的值重置为零?因为我不想为ID生成生成负数
当然,要小心ID生成和包装。就像其他人说的那样,您最终会重复使用ID。
AtomicLong atomicLong = new AtomicLong(0L);
atomicLong.compareAndSet(Long.MAX_VALUE, 0);
如果atomicLong等于Long.MAX_VALUE,则它被设置回0。 如果要同时进行比较和递增,则需要同步块或 Java 8 功能。
在 Java 8+ 中:
long nextId = atomicLong.updateAndGet(current -> current == Long.MAX_VALUE ? 0 : current + 1);
https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicLong.html#updateAndGet-java.util.function.LongUnaryOperator-