// 初始化
static AtomicInteger mySeq;
/**
* 返回 【前缀】 + 【9位时间长整型的36进制数,左补0】 + "-" + 5位序列号
*
* @param prefix
* @return
*/
public static String nextID(String prefix) {
if (mySeq == null) {
// 首次运行时的初始化
String timeSeq = new SimpleDateFormat("HHmmss", Locale.getDefault()).format(new Date()).substring(1);
mySeq = new AtomicInteger(Integer.parseInt(timeSeq));
}
// id前缀大写,补满2位
if (prefix == null) {
prefix = "??";
}
prefix = prefix.toUpperCase() + "__";
prefix = prefix.substring(0, 2);
// 9位时间长整型的36进制数,左补0
String ts = lpadZero(Long.toString(System.currentTimeMillis(), Character.MAX_RADIX), 9);
String id = prefix + ts + "-" + mySeq.getAndIncrement();
return id;
}
分享到:
相关推荐
3 12位的计数顺序号(12位的计数顺序号支持每个节点每毫秒产生4096个ID序号) 最高位是符号位,始终为0。 优点:高性能,低延迟;独立的应用;按时间有序。 缺点:需要独立的开发和部署。 原理 java 实现代码 1 ...
雪花算法是由Twitter开源的一种分布式ID生成策略,生成的ID是一个Long类型,由41位时间戳(毫秒精度)、10位机器ID(5位数据中心ID和5位机器ID)以及12位序列号组成。这样的设计确保了在分布式环境下的全局唯一性。...
Oracle自增长主键自动生成类 public static int nextID String table { if table null return 1; table table toLowerCase ; String strKey table; if sequences containsKey strKey { ...
生成的 ID 通常由两部分组成:机器 ID 和时间戳,以避免冲突。 ```java class IdWorker { // ... public synchronized long nextId() { return workerId | (sequence ) | (workerId ) | (sequence >>> 8); } ...
每个节点包含两个属性:`id` 和 `nextId`,其中 `nextId` 指向另一个节点的 `id`,形成链表的连接。这个问题的挑战在于要考虑链表可能为环状,以及可能出现的异常情况,如节点不在链表内。 首先,我们需要理解链表...
在这个问题中,我们需要寻找一个特殊的链表的头节点,这个链表的节点有两个属性:`id`和`nextId`,其中`nextId`指向了下一个节点的`id`。这个问题涉及到链表遍历和处理特殊情况,如环状链表和节点不存在的情况。 ...
题目所描述的问题是寻找一个特殊的链表的头节点,链表中的每个节点有两个属性:id 和 nextId,nextId 指向下一个节点的 id。解决这个问题需要对链表的操作有深入的理解,并能处理链表环状结构和异常情况。 首先,...
链表的每个节点包含两个属性:`id` 和 `nextId`,其中 `nextId` 指向了链表中的下一个节点的 `id`。这个问题的挑战在于要考虑链表可能存在的特殊情况,比如环状链表和不存在的节点。 首先,让我们定义链表节点的...
通过分析其核心方法`nextId()`及辅助方法,我们将了解它是如何确保在高并发环境下生成的ID具备唯一性、有序性和可扩展性的。 #### 二、核心逻辑分析 ##### 2.1 `nextId()` 方法详解 该方法是序列号生成器的核心...
在IDMA系统中,用户数据通过交织处理后再进行传输,以提高系统的抗干扰能力和频谱效率。这个压缩包文件包含了使用MATLAB实现的IDMA系统的仿真程序,主要包括两个关键模块:ESE(Error Simulation and Estimation)...