java写一个用于生成雪花id的工具类
我们创建一个类 叫 SnowflakeIdGenerator 作为生成雪花id的工具类
然后 编写代码如下
public class SnowflakeIdGenerator {private static final long START_TIMESTAMP = 1609459200000L; // 设置起始时间戳,可以根据需要进行调整private static final long WORKER_ID_BITS = 5L; // 机器ID所占位数private static final long DATACENTER_ID_BITS = 5L; // 数据中心ID所占位数private static final long SEQUENCE_BITS = 12L; // 序列号所占位数private static final long MAX_WORKER_ID = ~(-1L << WORKER_ID_BITS); // 机器ID的最大值private static final long MAX_DATACENTER_ID = ~(-1L << DATACENTER_ID_BITS); // 数据中心ID的最大值private static final long WORKER_ID_SHIFT = SEQUENCE_BITS; // 机器ID的位移量private static final long DATACENTER_ID_SHIFT = SEQUENCE_BITS + WORKER_ID_BITS; // 数据中心ID的位移量private static final long TIMESTAMP_LEFT_SHIFT = SEQUENCE_BITS + WORKER_ID_BITS + DATACENTER_ID_BITS; // 时间戳的位移量private static final long SEQUENCE_MASK = ~(-1L << SEQUENCE_BITS); // 序列号的屏蔽位private final long workerId; // 机器IDprivate final long datacenterId; // 数据中心IDprivate long lastTimestamp = -1L; // 上次生成ID的时间戳private long sequence = 0L; // 序列号public SnowflakeIdGenerator(long workerId, long datacenterId) {if (workerId > MAX_WORKER_ID || workerId < 0) {throw new IllegalArgumentException("Worker ID 超出范围");}if (datacenterId > MAX_DATACENTER_ID || datacenterId < 0) {throw new IllegalArgumentException("数据中心 ID 超出范围");}this.workerId = workerId;this.datacenterId = datacenterId;}public synchronized long nextId() {long timestamp = System.currentTimeMillis();if (timestamp < lastTimestamp) {throw new RuntimeException("系统时间不正确");}if (timestamp == lastTimestamp) {sequence = (sequence + 1) & SEQUENCE_MASK;if (sequence == 0) {timestamp = tilNextMillis(lastTimestamp);}} else {sequence = 0L;}lastTimestamp = timestamp;return ((timestamp - START_TIMESTAMP) << TIMESTAMP_LEFT_SHIFT) |(datacenterId << DATACENTER_ID_SHIFT) |(workerId << WORKER_ID_SHIFT) |sequence;}private long tilNextMillis(long lastTimestamp) {long timestamp = System.currentTimeMillis();while (timestamp <= lastTimestamp) {timestamp = System.currentTimeMillis();}return timestamp;}
}
然后 只需要在其他类中调用他 获取id即可
SnowflakeIdGenerator idGenerator = new SnowflakeIdGenerator(1, 1);
long id = idGenerator.nextId();
System.out.println("新的雪花ID:" + id);
这里 我们直接new了一个SnowflakeIdGenerator类的实例
然后 通过nextId获取一个雪花id
运行结果如下

也是没有任何问题
相关文章:
java写一个用于生成雪花id的工具类
我们创建一个类 叫 SnowflakeIdGenerator 作为生成雪花id的工具类 然后 编写代码如下 public class SnowflakeIdGenerator {private static final long START_TIMESTAMP 1609459200000L; // 设置起始时间戳,可以根据需要进行调整private static final long WORKER…...
淘宝开店装修教程 (2023新版)
一、下载千牛 1. 浏览器打开淘宝 https://www.taobao.com/ 2. 进入 - 千牛卖家中心 3. 进入 - 关于千牛 4. 下载千牛 5. 下载页面 6. 下载安装桌面 二、登录千牛 1. 登录页面 2. 进入 - 千牛工作台 三、pc店铺装修 1. 进入 - pc店铺 2. 进入 - 装修页面 3. 删除没用的模块 从…...
Python傅立叶变换
1. 什么是傅里叶变换? 在数学中,变换技术用于将函数映射到与其原始函数空间不同的函数空间。傅里叶变换时也是一种变换技术,它可以将函数从时域空间转换到频域空间。例如以音频波为例,傅里叶变换可以根据其音符的音量和频率来表示…...
MATLAB向量化编程基础精讲教程
向量化编程是MATLAB中一种重要的编程技术,通过使用向量和矩阵运算代替循环,可以提高代码的执行效率和可读性。本文将介绍MATLAB向量化编程的基础知识,并提供多个案例代码,帮助读者理解和应用向量化编程。 一、向量化编程基础知识…...
【非对称加密算法】RSA算法
一、非对称加密算法 非对称加密算法使用了两个不同的密钥:公钥和私钥。公钥是公开的,可以被任何人使用,而私钥是只有特定的人能够使用的。这种算法的加密和解密过程使用不同的密钥,因此称为非对称加密算法。 在非对称加密算法中…...
【滑动窗口】438. 找到字符串中所有字母异位词
438. 找到字符串中所有字母异位词 滑动窗口解法 创建两个Map 一个记录实际需要的有效字符 另一个记录窗口内的有效字符个数初始化need每次遍历一个字符 判断是不是有效字符 如果是 更新window 另外判断window中有效字符的个数是不是等于need中有效字符的个数 如果是更新valid…...
【PowerQuery】Excel 一分钟以内刷新PowerQuery数据
当需要进行刷新的周期如果小于一分钟,采用数据自动刷新就无法实现自动刷新的目标。那就没有办法了吗?当然不是,这里就是使用VBA来实现自动刷新。这里实现VBA刷新的第一步就是将当前的Excel 保存为带有宏的Excel 文件,如果不带宏则无法运行带有宏代码的Excel文件,保存过程如…...
【C语言】用冒泡排序实现my_qsort
大家好,我是苏貝,本篇博客带大家了解如何用冒泡排序实现my_qsort,如果你觉得我写的还不错的话,可以给我一个赞👍吗,感谢❤️ 目录 一. 前言二. 冒泡排序三. 4个参数3.1 第一个参数void* base3.2 第二个参数…...
【css】深入理解flex属性
参考文章: 深入理解Flex属性 flex弹性布局教程-05-项目属性flex-shrink flex:flex-grow flex-shrink flex-basis flex:0 1 0 如何计算flex布局,有flex-shrink和flex-grow的情况下,每个元素的大小 flex-grow生效公式如…...
前端项目开发流程
一 参加需求对称(评审)会议 时间:在产品设计完成以后,进入正式的开发流程之前 组织者:产品&项目经理 目的:统一大家对产品的认识,及时发现产品设计缺陷,尽可能降低后续修改需求的频率 参与者ÿ…...
MybatisPlus逆向工程入门指南:让你的开发更高效、更简洁、更优雅
学会了,可以看看这篇文章:更新中~ 正向工程:先创建Java实体类,由框架负责根据实体类生成数据库表。Hibernate是支持正向工程的。 逆向工程:先创建数据库表,由框架负责根据数据库表,反向生成如下…...
通用商城项目(下)
记录一些踩坑的地方,以及理顺一些思路。 通过管理系统页面,完成商品属性分组和商品属性(基本属性)关联维护 属性表 与 属性组表 的功能完善:显示属性组与属性表的一对多关系 前端 1. 引入组件,是否显示使…...
k8s集群使用ingress转发grafana服务
文章目录 前言一、思路二、grafana准备1. grafana-configmap.yaml2. grafana.yaml 三、ingress准备1. ingress.yaml2. grafana-externalname.yaml3. ingress-nginx-controller 四、 本机host文件准备五、访问测试 前言 在k8s集群中,使用ingress服务转发grafana的页…...
MongoDB的备份和恢复
工具 mongodump 和 mongorestore是MongoDB自带的备份恢复工具。 参考文章 ## https://blog.csdn.net/GUDUzhongliang/article/details/131915625## https://blog.csdn.net/mingongge/article/details/130695422 备份 mongodump 参数 -h, --host<hostname> …...
Pytorch学习笔记(GPU训练)
GUP训练 配置pytorch的gup版本主要是在网络模型、输入和标记的数据、损失函数 方式一 直接.cuda()调用,在原有的模型训练代码中的网络模型、输入和标记的数据、损失函数部分直接调用即可 方式二 事先定义好设备device,然后直接.to(device)调用,在原…...
一款开源的shell脚本分析工具
大家好,今天分享一款开源工具--shellcheck。 shellcheck 简介 今天发现的一款神器,如果你日常会接触到shell脚本,或者说自己需要写一些shell脚本,那么强烈建议你用下这个工具。 shellcheck一个静态的shell脚本分析工具…...
HTML <video> 标签
实例 一段简单的 HTML5 视频: <video src="movie.ogg" controls="controls"> 您的浏览器不支持 video 标签。 </video>定义和用法 <video> 标签定义视频,比如电影片段或其他视频流。 浏览器支持 元素ChromeIEFirefoxSafariOpera&l…...
mac 本地运行 http-proxy-middleware ,请求超时
const http require(http)"/customer": {target: "http://10.10.111.192:8080/",// target: "http://user.jinfu.baohan.com/",changeOrigin: true, // 是否启用跨域// 解决mac 代理超时问题headers: {Connection: "keep-alive"},// …...
【Effective Python】读书笔记-05类与接口
1. 让组合起来的类来实现多层结构,不用使用嵌套的内置类型 2. 让简单的接口接收函数,而不是类的实例 from collections import defaultdictcurrent {a: 1,b: 2,c: 3, }add_to_current {f: 4,e: 5, }def increment():count 0def missing():nonlocal …...
【办公自动化】用Python在Excel中查找并替换数据(文末送书)
🤵♂️ 个人主页:艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞Ǵ…...
yargs单元测试终极指南:使用mocha测试CLI命令的完整实践
yargs单元测试终极指南:使用mocha测试CLI命令的完整实践 【免费下载链接】yargs yargs the modern, pirate-themed successor to optimist. 项目地址: https://gitcode.com/gh_mirrors/ya/yargs yargs是一款功能强大的现代命令行参数解析工具,为…...
人工智能实操qpfan
一二import cv2 import matplotlib.pyplot as pltimg cv2.imread(./data-aug/cat.png) #img <1> img cv2.cvtColor(img, cv2.COLOR_BGR2RGB) #垂直翻转 #img_flip <2> img_flip cv2.flip(img, 0) #<3> plt.imshow(img_flip) plt.axis(off) plt.show() …...
从AgentKit看AI应用工程化:架构演进与可靠性设计
1. 项目概述:一个已归档的AI应用快速启动器如果你在2023年到2024年初关注过AI应用开发,特别是基于大语言模型(LLM)的智能体(Agent)构建,那么你很可能听说过或者尝试过AgentKit。这个由BCG X&…...
模拟电路延时触发音频振荡器:DIY电子蟋蟀的原理与实现
1. 项目概述:一场源于图书馆的“电子恶作剧”这个故事始于1977年,几个高中二年级的学生,在图书馆的参考书区发现了一本出版于40年代的“宝藏”书籍。书里充满了各种能让青春期男孩兴奋不已的内容:爆炸性混合物、自燃的纸飞机、三碘…...
机器学习知识产权保护:从数据到模型的立体防御策略
1. 机器学习投资保护的核心挑战与思路 在上一篇文章中,我们探讨了机器学习(ML)项目从构思到部署过程中,知识产权(IP)保护的基本框架和初步策略。今天,我们深入到更具体、也更棘手的层面…...
从`find -mtime`到`find -newermt`:Linux文件时间查找的进阶玩法与避坑指南
从find -mtime到find -newermt:Linux文件时间查找的进阶玩法与避坑指南 在Linux系统管理中,文件查找是开发者和运维工程师的日常高频操作。当我们需要追踪最近修改的配置文件、清理过期日志或备份特定时间段的文档时,find命令的时间参数便成为…...
手机跑多模态也能快到飞起!面壁MiniCPM-V 4.6开源
大模型技术正快步从云端机房走入普通人的智能手机,让移动设备直接处理复杂的图文与视频任务成为现实。面壁智能最新开源的一款多模态模型,以极低的算力成本,超低的首Token延迟,成功打通当前三大主流手机操作系统。MiniCPM-V 4.6专…...
Taotoken CLI工具一键配置团队开发环境实战指南
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 Taotoken CLI工具一键配置团队开发环境实战指南 1. 场景与需求 在团队协作开发中,统一管理大模型调用环境是一个常见且…...
老笔记本焕发第二春:微星GT60升级GTX1060保姆级避坑指南(含硬件ID修改)
微星GT60笔记本升级GTX1060全流程实战:从硬件改造到驱动破解 当手头的微星GT60笔记本逐渐跟不上现代游戏需求时,许多玩家会考虑升级显卡来延续它的使用寿命。MXM接口的GTX1060显卡因其性价比和性能表现成为热门选择,但整个升级过程充满技术陷…...
IoT产品创新方法论:构建“场景 × 技术 × 数据 × 商业”的系统创新能力
目录 一、 问题与背景 二、 本文将系统讲解 三、 什么是IoT产品创新 3.1 核心定义 3.2 IoT创新的核心变化 3.3 创新的三种层级(阶梯论) 四、 IoT产品创新结构模型(核心框架) 4.1 四维创新模型(核心体系) 4.2 创新演进路径 五、 五大IoT创新方法论(核心武器库)…...
