package com.gemantic.report.tyc.utils;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
/**
* @Auther: Wangtianming
* @Date: 2021/9/25 21:11
* @Description:
*/
public class UUIDUtil {
/*----------------------------------------------------------------------
*
* 第1-8位(年月日时分秒)
* 第8-13位(当前时间处理过的字段)
* 第13+位(编号序列默认4位数,不够前置补零,超出4位数按实际序列定)
* 实例:20200702174649999 序列为4位数
* 实例:202007021746410000 序列超出4位数
*
* ---------------------------------------------------------------------
/**
* ID编号
*/
public static AtomicInteger orderId = new AtomicInteger();
public static int getOrderNextId(){
return orderId.incrementAndGet();
}
/**
* 获取ID
* @return
*/
public synchronized Long getOrderCode(){
//当前时间
String localDate = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHMMSS"));
//微秒
String LongmicTime = (getmicTime ()).toString ();
//拼接
String s = "";
String format = String.format("%04d", getOrderNextId());
s += localDate.substring (0, 10);
s += LongmicTime.substring (13, 16);;
s += format;
return Long.valueOf(s);
}
/**
* 处理当前时间的纳秒
* @return
*/
private static Long getmicTime() {
Long cutime = System.currentTimeMillis() * 1000; // 微秒
Long nanoTime = System.nanoTime(); // 纳秒
return cutime + (nanoTime - nanoTime / 1000000 * 1000000) / 1000;
}
private UUIDUtil(){}
private static UUIDUtil uuidUtil;
public static UUIDUtil getInstance(){
if(uuidUtil == null)
uuidUtil = new UUIDUtil();
return uuidUtil;
}
//并发测试
public static void main(String[] args) {
List<Long> orderNos = Collections.synchronizedList(new ArrayList<Long>());
IntStream.range(0,10000).parallel().forEach(i->{
orderNos.add(UUIDUtil.getInstance().getOrderCode());
});
List<Long> filterOrderNos = orderNos.stream().distinct().collect(Collectors.toList());
System.out.println("id数:"+orderNos.size());
System.out.println("过滤重复后id数:"+filterOrderNos.size());
System.out.println("重复id数:"+(orderNos.size()-filterOrderNos.size()));
}
}
生成UUID
最新推荐文章于 2024-07-08 07:30:00 发布