java并发生成编号,java 并发生成商品编号

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());

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值