`

利用原子类生成唯一序列号

 
阅读更多
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)或者分布式锁来解决这个问题。这种方式简单易用,但可能会...

    订单号生成工具类

    2. **防止重复**:为了防止订单号重复,可以采用原子操作(如数据库的自增字段)来生成订单号的一部分,或者利用分布式锁确保同一时刻只有一个进程在生成订单号。此外,还可以通过哈希函数对生成的订单号进行校验,...

    自动生成ID(32位)所用jar

    在Java开发中,生成唯一的32位ID是一个常见的需求,特别是在分布式系统中,例如数据库主键生成、用户唯一标识、订单编号等。Apache Commons Lang库提供了一种解决方案,该库包含在你提到的两个jar文件中。Apache ...

    java多线程中的原子操作

    假设我们有一个需求,需要生成唯一的序列号,并且在多线程环境下保证这个序列号的正确性。我们可以创建一个名为SerialNumberGenerator的类,使用AtomicInteger来维护当前的序列号: ```java public class ...

    java快速ID自增器

    在Java开发中,高效地生成唯一且自增的ID是许多系统设计的关键部分。"Java快速ID自增器"就是为了解决这个问题而设计的一种工具或解决方案。它旨在提供一个高性能、线程安全的方式来生成自增ID,尤其适用于那些需要...

    sequence:从数据库生成序列 ID

    在IT行业中,尤其是在数据库管理和Java开发领域,生成唯一的序列ID是一项常见的需求。序列ID通常用于主键、订单号、用户ID等,确保数据的唯一性和完整性。本篇将详细探讨如何在数据库中生成序列ID,并结合Java编程...

    treeMap实现分组数据树形结构

    3. **分布式ID生成器**:如Twitter的Snowflake算法,通过时间戳、工作机器ID和序列号三部分组合生成全局唯一ID,可以在多台机器上并行生成ID,适合大规模分布式系统。 文件名"dataConversion"可能暗示了数据转换的...

    Group-Messenger-with-total-ordering-FIFO-:当存储消息并分配了序列号时,在此分配中可以保证消息的总数和FIFO顺序

    3. **序列号生成器**:使用原子类如`AtomicInteger`来生成并分配唯一的序列号。 4. **并发控制**:利用`synchronized`关键字或`ReentrantLock`确保多个线程安全地访问和修改序列号。 5. **网络通信**:使用Java的`...

    模拟发号程序

    【模拟发号程序】是一种用于生成唯一标识符的软件应用,常见于服务器系统中,用于为新创建的数据记录分配唯一的序列号。在这个特定的程序中,它被设计为C#语言编写,目的是为了测试和集成到服务器的发号端。程序的...

    boatmq-zookeeper.zip

    3. **全局唯一值**:ZooKeeper 提供了原子性的事务操作,可以用于生成全局唯一的序列号。在 BoatMQ 中,这可能被用于生成消息的唯一ID,确保在分布式环境中消息的唯一性,防止重复消费。 4. **配置中心**:BoatMQ ...

    分布式协调工具-ZooKeeper实现动态负载均衡

    利用ZooKeeper的强一致性,能够保证在分布式高并发情况下节点创建的全局唯一性,即:同时有多个客户端请求创建 /currentMaster 节点,最终一定只有一个客户端请求能够创建成功。利用这个特性,就能很轻易的在分布式...

Global site tag (gtag.js) - Google Analytics