【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设计模式可能是被讨论和使用的最广泛的一个设计模式了,这可能也是面试中问得最多的一个设计模式了.这个设计模式主要目的是想在整个系统 ...
随机推荐
- 源码安装rlwrap 0.43(为了方便使用linux下的sqlplus)
为了linux下的sqlplus方便调用历史命令和退格,安装下rlwrap,最新版本是0.43,貌似作者已经不更新了 下载地址 https://fossies.org/linux/privat/rlw ...
- SSH Weak Encryption Algorithms Supported
SSH使用了弱加密算法,解决方法: 在/etc/ssh/sshd_config中显式指定ssh通讯时使用的加密算法 在文件的最后加上: Ciphers aes128-ctr,aes192-ctr,ae ...
- 安装centos6.10时,安装完成重启报错error 15,file not found
今天在一台老式联想服务器上安装centos6.10操作系统,安装完成,重启时,出现报错 error 15, file not found...... 在百度上搜索到进grub编辑,可还是无法解决问题, ...
- AMQP与RabbitMQ
转载请注明原文地址:https://www.cnblogs.com/ygj0930/p/10922433.html 一:AMQP是什么 AMQP(Advanced Message Queuing Pr ...
- django-URL路由系统
配置 URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表.你就是以这种方式告诉Django,对于这个URL调用这段代码,对于那个U ...
- Linux下远程连接MySQL数据库
估计搞了一个多小时才把这个远程连接搞好.一台本地电脑,一台云服务器,都是linux系统. 步骤 在服务器端开启远程访问 首先进入mysql数据库,然后输入下面两个命令: grant all privi ...
- React源码 memo Fragment StrictMode cloneElement createFactory
1.memo react 16.6 推出的 api ,他的用意是给 function component 也有 PureComponent 这样一个类似的功能,因为我们知道 PureComponent ...
- 性能测试基础---ant集成1
·Jmeter的命令行与ant等的集成.·为什么需要使用Jmeter的命令行模式(Non-GUI).·为了更好的利用负载机的资源.GUI模式会消耗更多的系统资源.·为了更好的掌握jmeter和其它工具 ...
- VS操作中遇到的问题及解决
1.无法解析的外部符号 _main,该符号在函数 "int __cdecl invoke_main(void)" (?invoke_main@@YAHXZ) 中被引用 2. /ZI ...
- 20180610模拟赛T4——木棍
有\(N\)根木棍,每根的长度\(L\)和重量\(W\)已知.这些木棍将被一台机器一根一根地加工.机器需要一些启动时间来做准备工作,启动时间与木棍被加工的具体情况有关.启动时间遵循以下规则: 加工第一 ...