单实例环境,不是分布式

需要流水号

/**
* 流水号生成器
*
* 年+天号+毫秒+随机数
* 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位】的更多相关文章

  1. Java单实例的最佳写法

    前言:代码简洁与性能高效无法两全其美,本文章专注于大并发程序的性能,如果您追求代码简洁,本文章可能不太适合,因为本文章主要讨论如何写出在高并发下也能运行很好的代码. 并文章属于Java并发编程实战中例 ...

  2. KingbaseES V8R3集群管理维护案例之---集群迁移单实例架构

    案例说明: 在生产中,需要将KingbaseES V8R3集群转换为单实例架构,可以采用以下方式快速完成集群架构的迁移. 适用版本: KingbaseES V8R3 当前数据库版本: TEST=# s ...

  3. KingbaseES V8R6C6备份恢复案例之---单实例sys_baackup.sh备份

    案例说明: KingbaseES V8R6C6中sys_backup.sh在通用机单实例环境,默认需要通过securecmdd工具以及kingbase和root用户之间的ssh互信,执行备份初始化(i ...

  4. Oracle单实例情况下的library cache pin的问题模拟与问题分析

    Oracle单实例情况下的library cache pin的问题模拟与问题分析 參考自: WAITEVENT: "library cache pin" Reference Not ...

  5. java实现求二十一位水仙花数(21位水仙花数)

    一个N位的十进制正整数,如果它的每个位上的数字的N次方的和等于这个数本身,则称其为花朵数. 例如: 当N=3时,153就满足条件,因为 1^3 + 5^3 + 3^3 = 153,这样的数字也被称为水 ...

  6. Java ,单实例 多线程 ,web容器,servlet与struts1-2.x系列,线程安全的解决

    1.Servlet是如何处理多个请求同时访问呢? 回答:servlet是默认采用单实例,多线程的方式进行.只要webapp被发布到web容器中的时候,servlet只会在发布的时候实例化一次,serv ...

  7. Java中的单实例

    前几天刚学完单实例设计模式,今天看代码时发现一行代码很奇怪,getRuntime()函数的返回类型怎么是它本身,忽然想起前几天学的单实例模式,于是找到方法的定义,果然是静态私有变量,获取实例的公有方法 ...

  8. Oracle 单实例 迁移到 RAC 实例 -- 使用RMAN 异机恢复

    Oracle 官网有关单实例迁移到RAC的一个步骤说明: How to Convert 10g Single-Instance database to 10g RAC using Manual Con ...

  9. 深入浅出单实例Singleton设计模式

    深入浅出单实例Singleton设计模式 陈皓 单实例Singleton设计模式可能是被讨论和使用的最广泛的一个设计模式了,这可能也是面试中问得最多的一个设计模式了.这个设计模式主要目的是想在整个系统 ...

随机推荐

  1. MySql定时备份脚本

    最近需要对某服务的数据库数据进行备份,因此参考网上教程完成数据库备份脚本. 因为服务的使用频率较低,因此设置定时任务,在每天的中午以及午夜时分进行备份操作. #!/bin/bash # 设置mysql ...

  2. SpringMVC中控制器接收JSP页面表单的参数接收方式详解及细节注意(400错误)

    控制器方法中参数的接收 (1)以前的参数接收: String  param = req.getParameter(name): (2)SpringMVC简化这个操作,只需要给控制器方法添加参数即可 a ...

  3. MySQL数据逻辑备份

    逻辑备份: 备份的是建表.建库.插入等操作所执行SQL语句,适用于中小型数据库,效率相对较低. mysqldump mydumper使用mysqldump实现逻辑备份 语法: # mysqldump ...

  4. matplotlib 绘制正余弦曲线图

    1.普通风格 代码 import numpy as npimport matplotlib.pyplot as plt x = np.linspace(0, 2*np.pi, 50)y1 = np.s ...

  5. 201871010135 张玉晶 《2019面向对象程序设计(java)课程学习进度条》

    <2019面向对象程序设计(java)课程学习进度条> 周次 (阅读/编写)代码行数 发布博客量/评论他人博客数量 课余学习时间(小时) 学习收获最大的程序 阅读或编译让我 第一周 25/ ...

  6. 给某mooc站点准备的FE大纲

    https://segmentfault.com/a/1190000000465431 https://blog.csdn.net/mike_chen2stockings/article/detail ...

  7. 排序算法-冒泡排序(Java)

    package com.rao.sort; import java.util.Arrays; /** * @author Srao * @className BubbleSort * @date 20 ...

  8. 从rpm包提取rpm spec 的几种方法

    包含了源码包 先安装,然后在rpmbuild 目录直接可以查看文件 不用安装 ,使用rpm2cpio rpm2cpio myrpm.src.rpm | cpio -civ '*.spec' 没有源码 ...

  9. ACE在Ubuntu下的安装和编译

    之前写了很多linux下的底层网络API的demo,这些demo可用于了解底层的网络通信过程,但是想做出好的服务器用于实际业务还是非常困难的,需要大量的代码实现,移植性也非常差,想要写出高性能架构的服 ...

  10. (转)简单的Malloc实现

    现在,一般来说,我们可以实现malloc使得对malloc的调用将会被映射到系统调用sbrk上,sbrk(n)将会移动程序中断的位置-也就是程序的data段的最后.-偏移n个字节,这意味着,n个字节的 ...