单机环境下唯一流水号生成方式---采用全局变量加锁
===========================================流水号创建工具类
import com.taoxw.utils.date.DateFormatUtil; public class GlobalLockWorker{ private static Object lock = new Object(); private static long golbal = 0; /** * 流水号为20位十进制数:13位表示时间的数+7位(全局变量) * 采用全局变量加锁的方式确保唯一性 * 备注:测试线程池容量为100,线程数为10000 * 总个数:10000 * 去重总个数:10000 * 冲突数:0 */ public static String getSerialNumber1() { long temp; synchronized (lock) { temp = golbal++; } return String.format("%013d%07d", System.currentTimeMillis(), temp); } public static String getSerialNumber2() { long temp; synchronized (lock) { temp = golbal++; } return String.format("%s%07d", DateFormatUtil.formatCurDate(DateFormatUtil.DATE_PATTERN_yyyyMMddHHmmssSSS), temp); } }
===========================================流水号创建工具测试类
/** * 全局变量加锁方式实现序列号获取 */ @Test public void test_globalLockSerial() { // System.out.println(GlobalLockWorker.getSerialNumber1()); System.out.println(GlobalLockWorker.getSerialNumber2()); }