为了防止多线程下出现流水号出现线程不安全的问题,需要使用锁,但是synchronized 锁是重量级的,因此使用CAS自旋锁获取流水ID号。
public class AtomicIntegerUtil {
private static final AtomicInteger atomicInteger = new AtomicInteger(0);
private static final Integer MAX_NUM = 1024;
public static int getSN() {
int current;
int next;
do {
current = atomicInteger.get();
next = current > MAX_NUM ? 0 : current + 1;
} while (!atomicInteger.compareAndSet(current, next));
return next;
}
}