Class IdWorker
java.lang.Object
tech.riemann.nif.utils.IdWorker
ID生成器,基于Snowflake算法实现,用于生成唯一ID
- Author:
- Kerbores(kerbores@riemann.tech)
-
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final long最大工作节点IDstatic final long序列号掩码 -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionlongnextId()生成下一个ID 本方法通过时间戳、工作ID和序列号的组合来生成唯一的ID 它是线程安全的,确保在多线程环境下可以安全生成ID生成EC专用的唯一ID 该方法通过同步方式确保线程安全,并基于时间戳、workerId和序列号生成一个唯一的ID 当时间戳相同时,会递增序列号;当时间戳回退时,会抛出异常以防止生成重复的ID 如果时间戳相同且序列号达到最大值时,会等待直到时间戳改变
-
Field Details
-
MAX_WORKER_ID
public static final long MAX_WORKER_ID最大工作节点ID- See Also:
-
SEQUENCE_MASK
public static final long SEQUENCE_MASK序列号掩码- See Also:
-
-
Constructor Details
-
IdWorker
public IdWorker(long workerId) 构造函数- Parameters:
workerId- 工作节点ID- Throws:
IllegalArgumentException- 如果workerId超出范围
-
-
Method Details
-
nextId
public long nextId()生成下一个ID 本方法通过时间戳、工作ID和序列号的组合来生成唯一的ID 它是线程安全的,确保在多线程环境下可以安全生成ID- Returns:
- 生成的下一个ID
- Throws:
IllegalStateException- 如果时钟回退,即当前时间戳小于上一个时间戳,则抛出异常
-
nextIdForEc
生成EC专用的唯一ID 该方法通过同步方式确保线程安全,并基于时间戳、workerId和序列号生成一个唯一的ID 当时间戳相同时,会递增序列号;当时间戳回退时,会抛出异常以防止生成重复的ID 如果时间戳相同且序列号达到最大值时,会等待直到时间戳改变- Returns:
- 唯一ID,格式为当前年月加上一个长整型数字
- Throws:
IllegalStateException- 如果时间戳回退且无法生成新的ID时抛出此异常
-