多个线程并发 java生成不重复订单号
时间: 2023-10-05 08:13:45 浏览: 169
在多线程并发的情况下,如果使用时间戳 + 随机数方式生成订单号,可能会出现重复的情况。为了解决这个问题,可以使用Java的AtomicLong保证生成的订单号唯一性。
下面是一个使用AtomicLong实现多线程并发生成不重复订单号的Java代码示例:
```
import java.util.concurrent.atomic.AtomicLong;
public class OrderUtil {
private static AtomicLong orderNum = new AtomicLong(0);
public static String generateOrderNo() {
// 获取当前时间的毫秒数
long currentTime = System.currentTimeMillis();
// 获取自增的订单号
long newOrderNum = orderNum.incrementAndGet();
// 拼接订单号
String orderNo = "O" + currentTime + newOrderNum;
return orderNo;
}
}
```
调用示例:
```
for (int i = 0; i < 10; i++) {
new Thread(() -> {
String orderNo = OrderUtil.generateOrderNo();
System.out.println(orderNo);
}).start();
}
```
在上面的示例中,使用AtomicLong保证了生成的订单号的唯一性。同时,由于AtomicLong的自增操作是原子性的,所以可以保证多线程并发下生成的订单号是不重复的。
阅读全文