多线程并发不重复订单编号⽣成
不重复订单号⽣成
参考:
单机⽣成
/** 订单号⽣成(NEW) **/
private static final AtomicInteger SEQ =new AtomicInteger(1000);
private static final DateTimeFormatter DF_FMT_PREFIX = DateTimeFormatter.ofPattern("yyMMddHHmmssSS"); private static ZoneId ZONE_ID = ZoneId.of("Asia/Shanghai");
public static String generateOrderNo(){
LocalDateTime dataTime = w(ZONE_ID);
if(SEQ.intValue()>9990){
}立秋的习俗
return dataTime.format(DF_FMT_PREFIX)+AndIncrement();
}
/** 测试 **/
public static void main(String[] args){
List<String> orderNos = Collections.synchronizedList(new ArrayList<String>());
IntStream.range(0,8000).parallel().forEach(i->{
orderNos.add(generateOrderNo());
});兔子肉怎么做好吃又简单
List<String> filterOrderNos = orderNos.stream().distinct().List());
System.out.println("⽣成订单数:"+orderNos.size());
System.out.println("过滤重复后订单数:"+filterOrderNos.size());
System.out.println("重复订单数:"+(orderNos.size()-filterOrderNos.size()));
}
98年属什么的/**
测试结果:
⽣成订单数:8000
过滤重复后订单数:8000
重复订单数:0
**/
集群⽣成
import s.lang3.RandomUtils;
import java.InetAddress;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import urrent.atomic.AtomicInteger;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
public class OrderGen2Test {
/** 订单号⽣成 **/
private static ZoneId ZONE_ID = ZoneId.of("Asia/Shanghai");
private static final AtomicInteger SEQ =new AtomicInteger(1000);
private static final DateTimeFormatter DF_FMT_PREFIX = DateTimeFormatter.ofPattern("yyMMddHHmmssSS");
private static final DateTimeFormatter DF_FMT_PREFIX = DateTimeFormatter.ofPattern("yyMMddHHmmssSS"); public static String generateOrderNo(){
LocalDateTime dataTime = w(ZONE_ID);
if(SEQ.intValue()>9990){
}
return dataTime.format(DF_FMT_PREFIX)+getLocalIpSuffix()+AndIncrement();
}
private volatile static String IP_SUFFIX = null;
private static String getLocalIpSuffix (){
if(null != IP_SUFFIX){
return IP_SUFFIX;
}幼儿园教研工作计划
try{
synchronized(OrderGen2Test.class){
if(null != IP_SUFFIX){
return IP_SUFFIX;
}
InetAddress addr = LocalHost();
// 172.17.0.4 172.17.0.199 ,
String hostAddress = HostAddress();
if(null != hostAddress && hostAddress.length()>4){
String ipSuffix = im().split("\\.")[3];
if(ipSuffix.length()==2){
IP_SUFFIX = ipSuffix;
return IP_SUFFIX;
}
ipSuffix ="0"+ ipSuffix;
IP_SUFFIX = ipSuffix.substring(ipSuffix.length()-2);
return IP_SUFFIX;
}
IP_SUFFIX = Int(10,20)+"";
return IP_SUFFIX;
}
}catch(Exception e){
System.out.println("获取IP失败:"+e.getMessage());
IP_SUFFIX = Int(10,20)+"";
return IP_SUFFIX;
}
}
/** 测试 **/
public static void main(String[] args){
List<String> orderNos = Collections.synchronizedList(new ArrayList<String>());
IntStream.range(0,8000).parallel().forEach(i->{
orderNos.add(generateOrderNo());
});
List<String> filterOrderNos = orderNos.stream().distinct().List());
System.out.println("订单样例:"+ (22));
System.out.println("⽣成订单数:"+orderNos.size());
System.out.println("过滤重复后订单数:"+filterOrderNos.size());
早逢春
System.out.println("重复订单数:"+(orderNos.size()-filterOrderNos.size()));
}
}
饽论/**
订单样例:20082115575546011022
⽣成订单数:8000
过滤重复后订单数:8000
重复订单数:0
豌豆怎么种**/