多线程并发不重复订单编号生成

更新时间:2023-07-03 09:41:24 阅读: 评论:0

多线程并发不重复订单编号⽣成
ordering不重复订单号⽣成
参考:
单机⽣成
/** 订单号⽣成(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()));
}
/**
测试结果:
⽣成订单数:8000
过滤重复后订单数:8000
重复订单数:0
**/
集群⽣成
import s.lang3.RandomUtils;
scarf的意思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();
heroic couplet}
private volatile static String IP_SUFFIX = null;
private static String getLocalIpSuffix (){
if(null != IP_SUFFIX){
return IP_SUFFIX;
volunteering}
try{
synchronized(OrderGen2Test.class){
if(null != IP_SUFFIX){
return IP_SUFFIX;
define
}
InetAddress addr = LocalHost();
//  172.17.0.4  172.17.0.199 ,
String hostAddress = HostAddress();unconditional>hkbn
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
mba数学重复订单数:0
**/

本文发布于:2023-07-03 09:41:24,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/90/165646.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:订单   苏州   过滤
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图