public class SnowFlake extends Object
| 限定符和类型 | 字段和说明 |
|---|---|
private long |
dataCenterId
数据中心ID(0~31)
|
private long |
dataCenterIdBits
数据标识id所占的位数
|
private long |
dataCenterIdShift
数据标识id向左移17位(12+5)
|
private static String |
DEF_STR
机器id默认值
|
private static SnowFlake |
ID_WORKER |
private long |
lastTimestamp
上次生成ID的时间截
|
private long |
maxDataCenterId
支持的最大数据标识id,结果是31
|
private long |
maxWorkerId
支持的最大机器id,结果是31 (这个移位算法可以很快的计算出几位二进制数所能表示的最大十进制数)
|
private long |
sequence
毫秒内序列(0~4095)
|
private long |
sequenceBits
序列在id中占的位数
|
private long |
sequenceMask
生成序列的掩码,这里为4095 (0b111111111111=0xfff=4095)
|
private long |
timestampLeftShift
时间截向左移22位(5+5+12)
|
private long |
twepoch
开始时间截 (2022-01-01)
|
private long |
workerId
工作机器ID(0~31)
|
private long |
workerIdBits
机器id所占的位数
|
private long |
workerIdShift
机器ID向左移12位
|
| 构造器和说明 |
|---|
SnowFlake(long workerId,
long dataCenterId)
构造函数
|
| 限定符和类型 | 方法和说明 |
|---|---|
static Long |
geneId()
生成id
|
static String |
genId()
静态工具类
|
private static Long |
getDataCenterId()
生成数据中心id
|
private static Long |
getWorkId()
生成工作机器id
|
long |
nextId()
获得下一个ID (该方法是线程安全的)
|
private static Long |
str2Long(String input)
字符串转long
|
protected long |
tilNextMillis(long lastTimestamp)
阻塞到下一个毫秒,直到获得新的时间戳
|
protected long |
timeGen()
返回以毫秒为单位的当前时间
|
private final long twepoch
private final long workerIdBits
private final long dataCenterIdBits
private final long maxWorkerId
private final long maxDataCenterId
private final long sequenceBits
private final long workerIdShift
private final long dataCenterIdShift
private final long timestampLeftShift
private final long sequenceMask
private final long workerId
private final long dataCenterId
private long sequence
private long lastTimestamp
private static final SnowFlake ID_WORKER
public SnowFlake(long workerId,
long dataCenterId)
workerId - 工作ID (0~31)dataCenterId - 数据中心ID (0~31)public long nextId()
protected long tilNextMillis(long lastTimestamp)
lastTimestamp - 上次生成ID的时间截protected long timeGen()
private static Long getWorkId()
private static Long getDataCenterId()
public static String genId()
public static Long geneId()
Copyright © 2024. All rights reserved.