服务器唯一id生成规则
2014-07-01 16:54
162 查看
在使用hashCode的时候,发现会出现相同id,虽然几率很小。虽然发现并不是hashCode的原因,而是其他逻辑的问题。
但是还是试着自己写了一个id生成器,有些id是int的,比如说任务id;有些id是long的,比如说玩家id。
先贴代码来看:
View Code
在生成玩家id的时候把服务器的id也参与,便于以后的合服。
因为服务器是多线程,所以就用了 AtomicInteger 类型,不用再使用类似 sync等同步工具。
但是还是试着自己写了一个id生成器,有些id是int的,比如说任务id;有些id是long的,比如说玩家id。
先贴代码来看:
private static AtomicInteger id = new AtomicInteger(0); public static long getId() { return (ServerKit.getServerId() & 0xFFFF) << 48 | (System.currentTimeMillis()/1000L & 0xFFFFFFFF) << 16 | id.addAndGet(1) & 0xFFFF; } private static AtomicInteger IntId = new AtomicInteger(0); public static int getIntId() { return ((int)(System.currentTimeMillis() - 1000000000000L)/1000)<<16L | (IntId.addAndGet(1)); }
View Code
在生成玩家id的时候把服务器的id也参与,便于以后的合服。
因为服务器是多线程,所以就用了 AtomicInteger 类型,不用再使用类似 sync等同步工具。
相关文章推荐
- 服务器唯一id生成规则
- 游戏服务器生成全局唯一ID的几种方法
- 基于Java代码实现游戏服务器生成全局唯一ID的方法汇总
- 一个简单的游戏服务器生成全局唯一ID
- 游戏服务器生成全局唯一ID的几种方法
- 服务器唯一标识 id 的生成方法
- Solr6.6.0学习(五)Solr对IK分词器的配置、Solr自动生成唯一ID、Solr服务器的增量和全量更新
- 使用数据库自增特性生成全局唯一id
- 如何生成一个唯一的ID值
- asp.net Web Form 中获得服务器控件自动生成ID的方法
- java生成唯一ID简单方法
- oracle主键自动增长的实现 Oracle Sequence oracle maxid自动生成--ORA-00001: 违反唯一约束条件 (NAME.SYS_C005547)产生的原因之一(select * from all_cons_columns w
- SQL生成唯一ID号解决方案
- 生成唯一32位ID编码代码,以满足对ID编号的唯一性加资源性解决问题
- java根据时间生成唯一ID
- DataSnap服务器生成的ID自动更新到客户端
- 采用PHP函数uniqid生成一个唯一的ID
- asp.net Web Form 中获得服务器控件自动生成ID的方法
- 生成唯一的ID
- 介绍SQL2005 引入的按顺序生成的全局唯一标识符NEWSEQUENTIALID()