单机环境下唯一流水号生成方式---采用全局变量加锁


===========================================流水号创建工具类

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());
    }

相关