导读
由于项目需要,需要根据时间进行生成对应的批次,之前写了个线程不安全的,后面弃用,改为以下的。
使用
方式一
public class Test {/***批次号生成(NEW)**/private static final AtomicInteger CODE = new AtomicInteger(0);private static final DateTimeFormatter DF_FMT_PREFIX = DateTimeFormatter.ofPattern("yyMMddHHmmssSS");private static ZoneId ZONE_ID = ZoneId.of("Asia/Shanghai");public static String generateBatchNo(){LocalDateTime dataTime = LocalDateTime.now(ZONE_ID);if(CODE.intValue()>9990){CODE.getAndSet(0);}return dataTime.format(DF_FMT_PREFIX)+CODE.getAndIncrement();}/** 测试 **/public static void main(String[] args) {List<String> orderNos = Collections.synchronizedList(new ArrayList<String>());IntStream.range(0,8000).parallel().forEach(i->{orderNos.add(generateBatchNo());});List<String> filterOrderNos = orderNos.stream().distinct().collect(Collectors.toList());System.out.println("生成批次数:"+orderNos.size());System.out.println("过滤重复后批次数:"+filterOrderNos.size());System.out.println("重复批次数:"+(orderNos.size()-filterOrderNos.size()));}}
END
参考:线程并发不重复订单编号生成
搞定~
