【java】单实例下的 流水号【21位】
单实例环境,不是分布式
需要流水号
/**
* 流水号生成器
*
* 年+天号+毫秒+随机数
* 2019+134+480+11位随机数
* 4+3+3+11 = 21位
*
*
* @author sxd
* @date 2019/5/14 9:55
*/
public class SerialCreater { public static final String SERIAL_FROMAT = "%s%s%s%s"; private String serialNum; public SerialCreater() {
this.serialNum = String.format(
SERIAL_FROMAT,
DateUtil.thisYear(),
Calendar.getInstance().get(Calendar.DAY_OF_YEAR),
DateUtil.thisMillsecond(),
random());
} public static String getSerial(){
return new SerialCreater().serialNum;
} private String random(){
Long a = new Random().nextLong();
Long b = DateUtil.current(false);
Long c = (a-b)>>>16;
return autoGenericCode(c);
} private String autoGenericCode(Long old){
String result = old.toString();
int length = result.length();
if (length > 11){
result = result.substring(0,11);
}else if (length < 11){
result = String.format("%011d", old);
}
return result;
} }
调用:
System.out.println(SerialCreater.getSerial());
测试生成100W,查看是否重复:
public static void main(String[] args) {
Set<String> set = new HashSet<>();
System.out.println(set.size());
int a = 1000000;
for (int i = 0; i < a; i++) {
set.add(SerialCreater.getSerial());
}
System.out.println(set.size());
}
并发100W,100W个线程测试是否重复:
/**
* @author sxd
* @date 2019/5/14 13:35
*/
public class RUnTest { static final ConcurrentHashMap<String,Integer> concurrentHashMap = new ConcurrentHashMap<>(); public static void main(String[] args) { System.out.println(concurrentHashMap.size());
int a = 1000000;
for (int i = 0; i < a; i++) {
MyThread my = new MyThread();
my.run();
} System.out.println(concurrentHashMap.size());
} static class MyThread implements Runnable{ @Override
public void run() {
concurrentHashMap.put(SerialCreater.getSerial(),1);
}
}
}
【java】单实例下的 流水号【21位】的更多相关文章
- Java单实例的最佳写法
前言:代码简洁与性能高效无法两全其美,本文章专注于大并发程序的性能,如果您追求代码简洁,本文章可能不太适合,因为本文章主要讨论如何写出在高并发下也能运行很好的代码. 并文章属于Java并发编程实战中例 ...
- KingbaseES V8R3集群管理维护案例之---集群迁移单实例架构
案例说明: 在生产中,需要将KingbaseES V8R3集群转换为单实例架构,可以采用以下方式快速完成集群架构的迁移. 适用版本: KingbaseES V8R3 当前数据库版本: TEST=# s ...
- KingbaseES V8R6C6备份恢复案例之---单实例sys_baackup.sh备份
案例说明: KingbaseES V8R6C6中sys_backup.sh在通用机单实例环境,默认需要通过securecmdd工具以及kingbase和root用户之间的ssh互信,执行备份初始化(i ...
- Oracle单实例情况下的library cache pin的问题模拟与问题分析
Oracle单实例情况下的library cache pin的问题模拟与问题分析 參考自: WAITEVENT: "library cache pin" Reference Not ...
- java实现求二十一位水仙花数(21位水仙花数)
一个N位的十进制正整数,如果它的每个位上的数字的N次方的和等于这个数本身,则称其为花朵数. 例如: 当N=3时,153就满足条件,因为 1^3 + 5^3 + 3^3 = 153,这样的数字也被称为水 ...
- Java ,单实例 多线程 ,web容器,servlet与struts1-2.x系列,线程安全的解决
1.Servlet是如何处理多个请求同时访问呢? 回答:servlet是默认采用单实例,多线程的方式进行.只要webapp被发布到web容器中的时候,servlet只会在发布的时候实例化一次,serv ...
- Java中的单实例
前几天刚学完单实例设计模式,今天看代码时发现一行代码很奇怪,getRuntime()函数的返回类型怎么是它本身,忽然想起前几天学的单实例模式,于是找到方法的定义,果然是静态私有变量,获取实例的公有方法 ...
- Oracle 单实例 迁移到 RAC 实例 -- 使用RMAN 异机恢复
Oracle 官网有关单实例迁移到RAC的一个步骤说明: How to Convert 10g Single-Instance database to 10g RAC using Manual Con ...
- 深入浅出单实例Singleton设计模式
深入浅出单实例Singleton设计模式 陈皓 单实例Singleton设计模式可能是被讨论和使用的最广泛的一个设计模式了,这可能也是面试中问得最多的一个设计模式了.这个设计模式主要目的是想在整个系统 ...
随机推荐
- unity点击按钮弹出操作提示界面
1.首先在相应的位置添加一个(UGUI控件)image,在image下添加文本框和按钮设计弹出框内容如图: 2.新建C#脚本UITips using System.Collections; using ...
- 生成Uuid工具类
package com.freeter.util; import java.util.UUID; /** * @author liuqi * **/public class Uuid{ public ...
- <pre> 保留文本格式显示在网页上
<code> 标签 解释:保留输入的格式空格等不变,原样显示在网页上 例如: <pre> 通知 即日起不再提供公共设施 个店铺需自行准备. 望周知~!! 2020/10/10 ...
- 十一、yield生成器
1.对比range 和 xrange 的区别 >>> print range() [, , , , , , , , , ] >>> print xrange() x ...
- 【若泽大数据】玩转大数据之Spark零基础到实战
https://www.bilibili.com/video/av29407581?p=1 若泽大数据官网 http://www.ruozedata.com/ tidb 系列三:有了sparkjdbc ...
- apache在linux下安装
yum安装 主流Linux系统版本基本上都集成了apache服务器httpd,我们可以通过如下命令来查看我们的操作系统上是否已经安装了apache服务器httpd rpm -qa | grep htt ...
- 02-docker入门-docker常用的一些命令
在这里,有必要先对ducker在做一次介绍 ducker 是一个容器. 容器内部运行的是一个系统. 系统内部安装好了要调试 / 发布的工程,然后这个系统被打包成了一个镜像. ducker 就是这个镜像 ...
- Helm 安装Kafka
helm镜像库配置 helm repo add stable http://mirror.azure.cn/kubernetes/charts helm repo add incubator http ...
- [RN] React Native代码转换成微信小程序代码的转换引擎工具
React Native代码转换成微信小程序代码的转换引擎工具 https://github.com/areslabs/alita
- [RN] React Native 图片保存到相册(支持 Android 和 ios)
React Native 图片保存到相册(支持 Android 和 ios) 原理: IOS用 RN自带的 CameraRoll, Android 使用 不成功,需要 react-native-fs ...