package com.ezubo.global.util;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
/**
* 利用锁机制 不适用于分布式场景
* Created by on 2015-12-29.
*/
public class Generator3 {
private static Lock lock = new ReentrantLock();
private static final String DATE_FORMAT = "yyyyMMddHHmmss";
private static final SimpleDateFormat SIMPLE_DATE_FORMAT = new SimpleDateFormat(DATE_FORMAT);
private static String forwardTime = "";
private static Long no = 1L;
private Generator3(){
super();
}
/**
* 生成序列号
* @param prefix
* @return
*/
public static String getSeqNo(String prefix){
lock.lock();
try{
String pfix = prefix == null ? "" : prefix;
String currentTime = SIMPLE_DATE_FORMAT.format(new Date());
if(!currentTime.equals(forwardTime)){
no = 1L;
}
String serializeNo = FormatUtil.leftpad(no++ , "00000000");
forwardTime = currentTime;
return pfix + currentTime + serializeNo;
}finally {
lock.unlock();
}
}
}