package com.ezubo.global.util; import java.text.SimpleDateFormat; import java.util.Date; import java.util.concurrent.atomic.AtomicLong; /** * 利用原子类生成序列号 不适合分布式场景 * Created by on 2015-12-29. */ public class Generators2 { private static AtomicLong no = new AtomicLong(1L); private static final String DATE_FORMAT = "yyyyMMddHHmmss"; private static final SimpleDateFormat SIMPLE_DATE_FORMAT = new SimpleDateFormat(DATE_FORMAT); private static String forwardTime = ""; private Generators2(){ super(); } /** * 生成序列号 * @param prefix * @return */ public static String getSeqNo(String prefix){ String pfix = prefix == null ? "" : prefix; String currentTime = SIMPLE_DATE_FORMAT.format(new Date()); if(!currentTime.equals(forwardTime)){ no = new AtomicLong(1L); } String serializeNo = FormatUtil.leftpad(no.getAndIncrement(),"00000000"); synchronized (Generators.class){ forwardTime = currentTime; } return pfix + currentTime + serializeNo; } }
相关推荐
在单机系统中,数据库的自增ID是常用的生成唯一序列号的方式。但在分布式环境下,多个数据库实例无法共享一个自增序列,可以通过数据库中间件(如MyCat)或者分布式锁来解决这个问题。这种方式简单易用,但可能会...
在这个问题中,我们看到一个实现此类功能的示例代码,该代码利用了锁机制来确保序列号的正确生成。下面我们将详细探讨这段代码的实现原理以及如何优化以避免重复序列号的问题。 首先,`SerialNum` 类是生成序列号的...
2. **防止重复**:为了防止订单号重复,可以采用原子操作(如数据库的自增字段)来生成订单号的一部分,或者利用分布式锁确保同一时刻只有一个进程在生成订单号。此外,还可以通过哈希函数对生成的订单号进行校验,...
在Java开发中,生成唯一的32位ID是一个常见的需求,特别是在分布式系统中,例如数据库主键生成、用户唯一标识、订单编号等。Apache Commons Lang库提供了一种解决方案,该库包含在你提到的两个jar文件中。Apache ...
假设我们有一个需求,需要生成唯一的序列号,并且在多线程环境下保证这个序列号的正确性。我们可以创建一个名为SerialNumberGenerator的类,使用AtomicInteger来维护当前的序列号: ```java public class ...
在Java开发中,高效地生成唯一且自增的ID是许多系统设计的关键部分。"Java快速ID自增器"就是为了解决这个问题而设计的一种工具或解决方案。它旨在提供一个高性能、线程安全的方式来生成自增ID,尤其适用于那些需要...
3. **分布式ID生成器**:如Twitter的Snowflake算法,通过时间戳、工作机器ID和序列号三部分组合生成全局唯一ID,可以在多台机器上并行生成ID,适合大规模分布式系统。 文件名"dataConversion"可能暗示了数据转换的...
在IT行业中,尤其是在数据库管理和Java开发领域,生成唯一的序列ID是一项常见的需求。序列ID通常用于主键、订单号、用户ID等,确保数据的唯一性和完整性。本篇将详细探讨如何在数据库中生成序列ID,并结合Java编程...
3. **序列号生成器**:使用原子类如`AtomicInteger`来生成并分配唯一的序列号。 4. **并发控制**:利用`synchronized`关键字或`ReentrantLock`确保多个线程安全地访问和修改序列号。 5. **网络通信**:使用Java的`...
【模拟发号程序】是一种用于生成唯一标识符的软件应用,常见于服务器系统中,用于为新创建的数据记录分配唯一的序列号。在这个特定的程序中,它被设计为C#语言编写,目的是为了测试和集成到服务器的发号端。程序的...
3. **全局唯一值**:ZooKeeper 提供了原子性的事务操作,可以用于生成全局唯一的序列号。在 BoatMQ 中,这可能被用于生成消息的唯一ID,确保在分布式环境中消息的唯一性,防止重复消费。 4. **配置中心**:BoatMQ ...
RocksDB是一个C++库,支持原子性的读写操作,并且能够处理任何形式的字节流作为键和值。 RocksDB采用了基于LSM Tree(Log-Structured Merge Tree)的数据结构,这一设计使得RocksDB能够在降低磁盘随机写入操作的...
利用ZooKeeper的强一致性,能够保证在分布式高并发情况下节点创建的全局唯一性,即:同时有多个客户端请求创建 /currentMaster 节点,最终一定只有一个客户端请求能够创建成功。利用这个特性,就能很轻易的在分布式...
- **Filename**:文件名,由文件编号和其他元数据组成,用于生成文件的实际路径。 - **Level-N**:表示不同级别的文件分层,通常级别越高文件越大。 - **Compact**:紧凑操作,用于合并多个级别的文件,减少文件数量...