Java中唯一数的生成

来源:互联网 发布:上海软件培训班 编辑:程序博客网 时间:2024/05/17 02:39

唯一数的生成很简单,基本上以时间为基础进行生成。在JDK里面已经有java.util.UUID类可以生成唯一的随机数。如果希望生成的唯一数为特定的格式,那么就需要自己来生成唯一数了。生成唯一数时有两个因素是必须在考虑的:

  1. 必须保证唯一,这个一般以时间为基础进行变化。
  2. 高效,当然越高效越好。

有时我们希望在生成的唯一数中包含特定的内容,如把当前时间,如20110609132641,作为前缀等。以下片段供参考:

 

[java] view plaincopy
  1. public class UID {  
  2.   private static Date date = new Date();  
  3.   private static StringBuilder buf = new StringBuilder();  
  4.   private static int seq = 0;  
  5.   private static final int ROTATION = 99999;  
  6.   public static synchronized long next(){  
  7.     if (seq > ROTATION) seq = 0;  
  8.     buf.delete(0, buf.length());  
  9.     date.setTime(System.currentTimeMillis());  
  10.     String str = String.format("%1$tY%1$tm%1$td%1$tk%1$tM%1$tS%2$05d", date, seq++);  
  11.     return Long.parseLong(str);  
  12.   }  
  13. }  
 
/** * 生成唯一订单号 * @author robin * @date 2015/11/10 */public class UIDUtil {private static Date date = new Date();//StringBuffer线程安全 , StringBuilder不保证线程同步private static StringBuilder strBuf = new StringBuilder();private static int seq = 0;private static final int ROTATION = 99999;public static synchronized String next() {if (seq > ROTATION) {seq = 0;}strBuf.delete(0, strBuf.length());date.setTime(System.currentTimeMillis());String str = String.format("%1$tY%1$tm%1$td%1$tk%1$tM%1$tS%2$05d", new Object[] { date, Integer.valueOf(seq++) });return str;}}

0 0