雪花算法初步完成后,我們討論了幾個位運算的寫法,大家知道雪花算法一旦確定后,很多數字都是定死的,比如機器占多少位,或者時間向左位移多少,這些在算法具體邏輯確定后就不會變了。那么寫成最后的數字和用位運算計算出來有什么區別呢?
其實沒有區別,我們的程序分為編譯期和運行期,我們直接把程序編譯好,然后查看class文件,就會發現,兩種寫法編譯結果是一樣的。用位運算計算出來只是更加靈活而已,定義很多死的數字也容易寫錯,后期維護混亂。所以,下面我們來一個最終版,首先看基本的幾個常量定義:
然后看時間部分的常量:

再看機器信息的常量:

最后看毫秒內序列的常量定義:

上面的常量中,只要修改最開始的四個部分的長度,下面的所有常量都會自動修改。
再來看一下主程序:

注意上面判斷統一毫秒內序列的變化。其它輔助方法都沒有什么變化,不再討論。現在我們再看看編譯完后生成的class文件:

可以看到編譯后的文件其實就是最終定義了死的常數。包括主程序也是一樣:

上面就是雪花算法的最終版!!!
最后來測試一下效率,我們來生成300萬個id看看花費的時間:
