When the display is turned off, the build speed of 30,000 per millisecond can be reached
/*** An implementation of Twitter snowflake ID Generator*/ Public classSnowflakeid {Private Final Static LongEPOCH = 0L;//shift for smaller timestamp Private Final Static LongDevice_id_bits = 2L; Private Final Static LongSequence_bits = 16L; Private Final Static Longmax_worker_id = -1l ^ -1l << device_id_bits;//with & non-or | xor ^, only the bit on Worker_id_bits is 1 Private Final Static intSequence_mask = (int) ( -1l ^ -1l <<sequence_bits); Private Final LongdeviceId; Private FinalRecyclableatomicinteger atomic =NewRecyclableatomicinteger (); Private LongLasttimestamp = -1l; PublicSnowflakeid (Final LongdeviceId) { if(DeviceId > max_worker_id | | deviceId < 0) { Throw Newillegalargumentexception (String.Format ("Device ID should be between 0 and%d", This. max_worker_id)); } This. DeviceId =deviceId; } Public LongNextID () {Longtimestamp =millisecond (); if(Timestamp <Lasttimestamp) { Throw Newillegalargumentexception (String.Format ("Wait%d milliseconds", Lasttimestamp-timestamp)); } if(Lasttimestamp = =timestamp) { intsequence =atomic.incrementandrecycle (Sequence_mask); if(Sequence = = 0) {timestamp=Waittilnextmillis (Lasttimestamp); Lasttimestamp=timestamp; } return(Timestamp-epoch << (sequence_bits + device_id_bits)) | (deviceId << sequence_bits) |sequence; } Else{Atomic.set (0); Lasttimestamp=timestamp; return(Timestamp-epoch << (sequence_bits + device_id_bits)) | (DeviceId <<sequence_bits); } } Private LongWaittilnextmillis (Final LongLasttimestamp) {System.out.print (Lasttimestamp); Longtimestamp; for (;;) {Timestamp= This. Millisecond (); System.out.print (+); if(Timestamp >Lasttimestamp) {System.out.print ("\ n"); returntimestamp; } } } Private Longmillisecond () {returnSystem.currenttimemillis (); } Public Static voidMain (string[] args) {Snowflakeid worker=NewSnowflakeid (1); LongStart =System.currenttimemillis (); for(inti = 0; i < 5000000; i + +) { //System.out.println (Worker.nextid ());Worker.nextid (); } LongDuration = System.currenttimemillis ()-start; System.out.println ("Total:" + duration + "MS," + 5000000/duration + "/ms"); }}
The Java implementation of Twitter snowflake