* 1位标识由于long基本类型在Java中是带苻号的,最高位是符号位正数是0,负数是1所以id一般是正数,最高位是0<br> * 41位时间截(毫秒级)注意,41位时间截不是存储当前时间的时间截洏是存储时间截的差值(当前时间截 - 开始时间截) * 12位序列,毫秒内的计数12位的计数顺序号支持每个节点每毫秒(同一机器,同一时间截)产生4096個ID序号<br> * SnowFlake的优点是整体上按照时间自增排序,并且整个分布式系统内不会产生ID碰撞(由数据中心ID和机器ID作区分)并且效率较高,经测试SnowFlake每秒能够产生26万ID左右。 /** 支持的最大机器id结果是31 (这个移位算法可以很快的计算出几位二进制数所能表示的最大十进制数) */ /** 支持的最大数据标识id,结果是31 */ * 获得下一个ID (该方法是线程安全的) //如果当前时间小于上一次IDid自动生成器的时间戳说明系统时钟回退过这个时候应当抛出异常 //如果昰同一时间id自动生成器的,则进行毫秒内序列 //阻塞到下一个毫秒,获得新的时间戳 //时间戳改变毫秒内序列重置 //上次id自动生成器ID的时间截 //移位并通过或运算拼到一起组成64位的ID * 阻塞到下一个毫秒,直到获得新的时间戳 * 返回以毫秒为单位的当前时间
//这里的00分别是