importjava.time.Instant;importjava.util.HashSet;importjava.util.Set;importjava.util.UUID;importjava.util.concurrent.Callable;importjava.util.concurrent.ExecutionException;importjava.util.concurrent.FutureTask;importjava.util.concurrent.ThreadLocalRandom;importjava.util.concurrent.atomic.AtomicInteger;importorg.apache.commons.lang3.StringUtils;importorg.apache.commons.lang3.time.FastDateFormat;/*** 订单编号策略
*
* @project common-utils
* @fileName ODDGenerator.java
* @Description
*@authorlight-zhang
* @date 2018年5月11日
*@version1.0.0*/
public abstract classODDGenerator {private static final FastDateFormat pattern = FastDateFormat.getInstance("yyyyMMddHHmmss");private static final AtomicInteger atomicInteger = new AtomicInteger(1);private static ThreadLocal threadLocal = new ThreadLocal();/*** 【长码生成策略】
*
* @时间20180511231532
* @二位随机数
* @lock的hash-code编码
*@paramlock 生成的UUID32位参数
*@return长码机制*/
public staticString getC(String lock) {
StringBuilder builder= new StringBuilder(pattern.format(Instant.now().toEpochMilli()));//取系统当前时间作为订单号前半部分
builder.append(Math.abs(lock.hashCode()));//HASH-CODE
builder.append(atomicInteger.getAndIncrement());//自增顺序
threadLocal.set(builder);returnthreadLocal.get().toString();
}/*** 【短码生成策略】
*
*@paramlock
*@return
*/
public staticString getD(String lock) {
StringBuilder builder= new StringBuilder(ThreadLocalRandom.current().nextInt(0,999));//随机数
builder.append(Math.abs(lock.hashCode()));//HASH-CODE
builder.append(atomicInteger.getAndIncrement());//自增顺序
threadLocal.set(builder);returnthreadLocal.get().toString();
}/*** 1000个线程并发测试
*
*@paramargs
*@throwsInterruptedException
*@throwsExecutionException*/
public static void main(String[] args) throwsInterruptedException, ExecutionException {
Set set = new HashSet();
FutureTask task = null;long startTime =System.currentTimeMillis();for (int i = 0; i <1; i++) {
Callable callable = new Callable() {
@Overridepublic String call() throwsException {//System.out.println("当前线程:>>>>> ".concat(Thread.currentThread().getName()));//return getC(StringUtils.replace(UUID.randomUUID().toString(), "-", ""));
return getD(StringUtils.replace(UUID.randomUUID().toString(), "-", ""));
}
};
task= new FutureTask(callable);newThread(task).start();//System.out.println(task.get());
set.add(task.get());
}
System.out.println("总共耗时:" + ((System.currentTimeMillis() - startTime)) + "ms");
System.out.println("*************** " +set.size());
}
}