java按照日期生成编码_流水号生成方法——按照时间格式生成的有序唯一编码(支持并发)...

这篇博客分享了一种Java方法,用于根据日期和时间生成有序且唯一的编码,适用于并发场景。编码格式为前缀+yyyyMMddHHmmss+四位数字,通过加锁确保多线程下的唯一性和有序性。在编码数量超过四位数时,程序会自动等待下一秒继续生成,目前不支持分布式,但计划将来利用Redis实现分布式环境的支持。
摘要由CSDN通过智能技术生成

这个周末挺冷的,宅在家,看完了吴军写的《硅谷之谜》,晚上忙完生活琐事之后,突然想起了最近工作时遇到了唯一编码生成的问题,突然有想法,就写了一个方法并通过了自己的测试,觉得还不错,所以分享一下。

实际工作中,我们也许会用到根据时间来生成一个有序的唯一编码作为项目编号或者流水号之类的,例如前缀+yyyyMMddHHmmss+四位有序的数字(CEO201702262330320001).为了支持并发,我加了锁,然后如果同一秒内生成的数量超过了四位数,那么做了自动等待下一秒,继续生成编码。保证了即使是多线程也是唯一,且有序。具体代码如下,有需要的朋友看参考下,当然如果有不足的地方也欢迎指正。

另外,目前这个算法是不支持分布式的,稍后,找个时间加入redis,来实现满足分布式的环境。

代码如下:

class GUniqueCode

{

private static readonly object lockTimeCode = new object();

private static Dictionary dic = new Dictionary();

public List GSeqTimeCode(string preCode="",int pCount=1)

{

List tmLs = new List();

int secondCount = 1;

StringBuilder sb = new StringBuilder();

for (int i = 0;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值