21xrx.com
2024-12-22 23:25:27 Sunday
登录
文章检索 我的文章 写文章
Java实现唯一id生成
2023-06-16 16:00:24 深夜i     --     --
Java UUID Snowflake 单例模式 AtomicLong 唯一ID

在实际应用中,生成唯一的ID是非常常见的需求。Java提供了多种方法可以生成唯一ID,比如UUID、Snowflake算法等。但是,应该根据具体业务需求来选择合适的方法。下面将具体介绍一些Java实现唯一ID的方法。

1. UUID

UUID是一种在所有计算机和网络中通用唯一识别标准的标识符。它可以保证在任何一台计算机上生成的ID都是唯一的。Java中提供了获取UUID的方法,比较简单:


UUID uuid = UUID.randomUUID();

String uniqueId = uuid.toString();

但是UUID存在一个缺点,那就是它的长度太长了,对于有些场景来说,这样的长度可能是不可接受的。

2. Snowflake算法

Snowflake算法是Twitter开源的一种分布式ID生成算法,可以生成64位的唯一ID。Snowflake算法根据具体实现不同,一般由以下几部分组成:

- 时间戳。

- 工作机器ID。

- 序列号。

Java中可以通过snowflake-java这个库来实现Snowflake算法。


// 参数分别为:

// 工作机器ID(0-31)、数据中心ID(0-31)、序列号位数(1-21)

Snowflake snowflake = IdUtil.createSnowflake(1L, 1L);

long uniqueId = snowflake.nextId();

3. 单例模式+AtomicLong

这种方式相对来说比较简单,可以通过AtomicLong实现:


public class UniqueIdGenerator {

  private static volatile UniqueIdGenerator instance;

  private AtomicLong atomicLong = new AtomicLong(0);

  private UniqueIdGenerator() {}

  public static UniqueIdGenerator getInstance() {

    if (instance == null) {

      synchronized (UniqueIdGenerator.class) {

        if (instance == null) {

          instance = new UniqueIdGenerator();

        }

      }

    }

    return instance;

  }

  public long generateId() {

    return atomicLong.incrementAndGet();

  }

}

以上三种方式是Java实现唯一ID的常见方法,根据具体业务需求来选择合适的方法。需要注意的是,生成唯一ID和保证ID唯一性并不是一回事,保证ID唯一性需要结合具体业务场景来进行综合考虑。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复