public class SnowFlakeId19 extends Object implements KenGen
| Modifier and Type | Field and Description |
|---|---|
private long |
datacenterId
数据中心ID(0~31)
|
private long |
datacenterIdBits
数据标识id所占的位数
|
private long |
datacenterIdShift
数据标识id向左移17位(12+5)
|
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
开始时间截 (2015-01-01)
|
private long |
workerId
工作机器ID(0~31)
|
private long |
workerIdBits
机器id所占的位数
|
private long |
workerIdShift
机器ID向左移12位
|
| Constructor and Description |
|---|
SnowFlakeId19(long workerId,
long datacenterId)
构造函数
|
| Modifier and Type | Method and Description |
|---|---|
long |
nextId()
获得下一个ID (该方法是线程安全的)
|
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 long workerId
private long datacenterId
private long sequence
private long lastTimestamp
public SnowFlakeId19(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()
Copyright © 2024. All rights reserved.