java 生成Long 類型 唯一ID



import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Set;
import java.util.TreeSet;
import java.util.UUID;
import java.util.concurrent.atomic.AtomicLong;


public class UuidUtils {

    private static AtomicLong id;


    /**
     * 生成Long 類型唯一ID
     */
    public synchronized static Long getId() {
        //如果需要更長 或者更大冗餘空間, 只需要 time * 10^n   即可  
        //當前可保證1毫秒 生成 10000條不重複 
        Long time = Long.valueOf(new SimpleDateFormat("yyyyMMddHHmmssSSS").format(new Date()))*10000;
        if (id == null) {
            id = new AtomicLong(time);
            return id.get();
        }
        if (time <= id.get()) {
            id.addAndGet(1);
        } else {
            id = new AtomicLong(time);
        }
        return id.get();
    }

    public static void main(String[] args) throws InterruptedException {
        Set<Long> set = new TreeSet<>();
        for (int i = 0; i < 100; i++) {
            new Thread(() ->
            {
                Long id = getId();
                set.add(id);
                System.out.println(id);
            }
            ).start();
        }
        Thread.sleep(5000);
        int size = set.size();
        System.out.println(size);
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章