新增方法,获取 IdGenerator 维护的 SnowflakeIdGenerator 实例。

feature/net-util
ZhouXY108 2023-06-19 18:10:43 +08:00
parent 5a1ee1fd86
commit 3537721a2e
1 changed files with 12 additions and 7 deletions

View File

@ -31,11 +31,22 @@ public class IdGenerator {
digits(uuid.getLeastSignificantBits(), 12));
}
/** Returns val represented by the specified number of hex digits. */
private static String digits(long val, int digits) {
long hi = 1L << (digits * 4);
return Long.toHexString(hi | (val & (hi - 1))).substring(1);
}
// ===== SnowflakeId =====
private static final Table<Long, Long, SnowflakeIdGenerator> snowflakePool = HashBasedTable.create();
public static long nextSnowflakeId(long workerId, long datacenterId) {
SnowflakeIdGenerator generator = getSnowflakeIdGenerator(workerId, datacenterId);
return generator.nextId();
}
public static SnowflakeIdGenerator getSnowflakeIdGenerator(long workerId, long datacenterId) {
SnowflakeIdGenerator generator = snowflakePool.get(workerId, datacenterId);
if (generator == null) {
synchronized (IdGenerator.class) {
@ -46,13 +57,7 @@ public class IdGenerator {
}
}
}
return generator.nextId();
}
/** Returns val represented by the specified number of hex digits. */
private static String digits(long val, int digits) {
long hi = 1L << (digits * 4);
return Long.toHexString(hi | (val & (hi - 1))).substring(1);
return generator;
}
private IdGenerator() {