package Ġxyz . core ys . k ip Ċ Ċ /* Ċ Ġ* ĠCreated Ġin Ġreference Ġto ĠTwitter s Ġold ĠID - generator Ġby Ġthe Ġsame Ġname . Ċ Ġ* Ġhttps :// github . com / twitter / snow flake Ċ Ġ*/ Ċ Ċ private Ġconst Ġval ĠK IP _ EPOCH _ IN _ SECONDS Ġ= Ġ 1 5 2 3 4 8 0 0 0 0 Ċ Ċ class ĠSnow flake ( ĊĠĠĠ Ġprivate Ġval Ġsequence Bits : ĠInt Ċ ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġsequence Mask Ġ= Ġ- 1 Ġxor Ġ(- 1 Ġshl Ġsequence Bits ) ĊĠĠĠ Ġprivate Ġvar Ġsequence Ġ= Ġ 0 ĊĊĠĠĠ Ġprivate Ġvar Ġlast Timestamp Ġ= Ġ- 1 L ĊĊĠĠĠ Ġval Ġnext Id : ĠLong Ġ@ Synchron ized Ġget () Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġtimestamp Ġ= Ġget K ip Timestamp () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( timestamp Ġ== Ġlast Timestamp ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsequence Ġ= Ġ( sequence Ġ+ Ġ 1 ) Ġand Ġsequence Mask ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( sequence Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtimestamp Ġ= Ġtil Next Millis ( last Timestamp ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsequence Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġlast Timestamp Ġ= Ġtimestamp ĊĠĠĠĠĠĠĠ Ġreturn Ġ( timestamp Ġshl Ġsequence Bits ) Ġor Ġsequence . to Long () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġtil Next Millis ( last Timestamp : ĠLong ): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġtimestamp Ġ= Ġget K ip Timestamp () ĊĠĠĠĠĠĠĠ Ġwhile Ġ( timestamp Ġ<= Ġlast Timestamp ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtimestamp Ġ= Ġget K ip Timestamp () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġtimestamp ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget K ip Timestamp (): ĠLong Ġ= Ġ( System . currentTimeMillis () Ġ/ Ġ 1 0 0 0 ) Ġ- ĠK IP _ EPOCH _ IN _ SECONDS Ċ Ċ } Ċ