IdWorker-UUID生成器
来源:互联网 发布:网络斯诺克游戏 编辑:程序博客网 时间:2024/06/05 06:26
public class IdWorker {
private final long twepoch = 1288834974657L;
private final long workerIdBits = 5L;
private final long datacenterIdBits = 5L;
private final long maxWorkerId = -1L ^ (-1L << workerIdBits);
private final long maxDatacenterId = -1L ^ (-1L << datacenterIdBits);
private final long sequenceBits = 12L;
private final long workerIdShift = sequenceBits;
private final long datacenterIdShift = sequenceBits + workerIdBits;
private final long timestampLeftShift = sequenceBits + workerIdBits + datacenterIdBits;
private final long sequenceMask = -1L ^ (-1L << sequenceBits);
private long workerId;private long datacenterId;private long sequence = 0L;private long lastTimestamp = -1L;public IdWorker(long workerId, long datacenterId) { if (workerId > maxWorkerId || workerId < 0) { throw new IllegalArgumentException(String.format("worker Id can't be greater than %d or less than 0", maxWorkerId)); } if (datacenterId > maxDatacenterId || datacenterId < 0) { throw new IllegalArgumentException(String.format("datacenter Id can't be greater than %d or less than 0", maxDatacenterId)); } this.workerId = workerId; this.datacenterId = datacenterId;}public synchronized long nextId() { long timestamp = timeGen(); if (timestamp < lastTimestamp) { throw new RuntimeException(String.format("Clock moved backwards. Refusing to generate id for %d milliseconds", lastTimestamp - timestamp)); } if (lastTimestamp == timestamp) { sequence = (sequence + 1) & sequenceMask; if (sequence == 0) { timestamp = tilNextMillis(lastTimestamp); } } else { sequence = 0L; } lastTimestamp = timestamp; return ((timestamp - twepoch) << timestampLeftShift) | (datacenterId << datacenterIdShift) | (workerId << workerIdShift) | sequence;}protected long tilNextMillis(long lastTimestamp) { long timestamp = timeGen(); while (timestamp <= lastTimestamp) { timestamp = timeGen(); } return timestamp;}protected long timeGen() { return System.currentTimeMillis();}public static void main(String[] args) { IdWorker idWorker = new IdWorker(0, 0); for (int i = 0; i < 1000; i++) { long id = idWorker.nextId(); System.out.println(id); }}
}
/**
* @author Bean
* 参考twitter snowfake 的实现方式
* @see http://github.com/twitter/snowflake
*/
public class SnowflakeUUIDGenerator {
/** * */public SnowflakeUUIDGenerator() {}
}
- IdWorker-UUID生成器
- IdWorker
- UUID生成器
- uuid生成器
- 分布式唯一ID生成器Twitter 的 Snowflake idworker java版本
- uuid.hex主键生成器
- Android UUID主键生成器
- JavaScript的UUID生成器
- UUID唯一标识生成器
- uuid.hex主键生成器
- IdWorker 2
- Base64压缩UUID长度替换Hibernate原有UUID生成器
- Base64压缩UUID长度替换Hibernate原有UUID生成器
- java代码生成UUID以及在线UUID生成器
- Online GUID Generator -在线GUID/UUID生成器
- go 实现一个简单的UUID生成器
- 7.11 Hibernate:内置生成器 – uuid
- hibernate的uuid主键生成器(使用注解)
- Java-NIO(一):简介
- Mapreduce切片机制
- 全链路设计师学习成长晋级之路
- 网页调用腾讯qq在线客服
- linux命令之nc,emacs,go run,查看文件行数等
- IdWorker-UUID生成器
- Python3 安装 mysql-python 与ImportError: No module named 'ConfigParser'报错解决方法
- 数据库事务的四大特性以及事务的隔离级别
- 彩色图像--色彩空间 HSI(HSL)、HSV(HSB)
- 电表芯片调试笔记记录
- 第一次服务器上搭建网站
- 基于GM(0,N)的时间序列预测R实现
- 关于spring boot自动注入出现Consider defining a bean of type 'xxx' in your configuration问题解决方案
- Exception: Java gateway process exited before sending the driver its port number