如何在Java中生成唯一ID(整数)?
-
24-09-2019 - |
题
如何在java中生成唯一的整数ID而不猜测下一个数字?
解决方案
它需要有多独特?
如果它仅在进程中是唯一的,那么您可以使用 AtomicInteger
并打电话 incrementAndGet()
每次你需要一个新值时。
其他提示
int uniqueId = 0;
int getUniqueId()
{
return uniqueId++;
}
如果你希望它是线程安全的添加synchronized
。
这很容易,如果你的一些限制。
如果你有一个线程,你只需要使用UNIQUEID ++;请务必保存当前UNIQUEID当您退出。
如果你有多个线程,一个公共同步generateUniqueID方法作品(实施与上述相同)。
的问题是,当你有许多CPU - 。在一个集群或一些分布式设置像一个对等网络游戏任
在这种情况下,通常可以结合两个部分,以形成一个单一的数字。例如,每个产生一个唯一的ID的过程可以有分配它自己的2字节的ID号码,然后用UNIQUEID ++相结合。是这样的:
return (myID << 16) & uniqueID++
它可以是棘手分发“本身份识别码”部,但也有一些方法。你可以只抓了一个集中的数据库,从中央服务器请求一个唯一的ID,...
如果你有一个长期的,而不是一个Int,在常用的招数之一是把设备ID接口eth0的(UUID),这是保证是唯一的一个服务器 - 那么只需添加一个序列号。 p>
如果你的真正用意整数而不是INT:
Integer id = new Integer(42); // will not == any other Integer
如果你想要的东西外可见一个JVM到其他进程或用户,持续的,或其他因素的主机,那么还有其他的方法,但是没有上下文,你可能最好使用使用内置的独特性系统内的对象的身份。
只需生成ID并检查它是否在已生成的ID列表已经存在或不存在。
你需要;
- 独特之间的两Jvm运行 同一时间。
- 独一无二的,即使如果JVM 重新启动。
- 线的安全。
- 支持空?如果不是,使用int或长。
import java.util.UUID;
public class IdGenerator {
public static int generateUniqueId() {
UUID idOne = UUID.randomUUID();
String str=""+idOne;
int uid=str.hashCode();
String filterStr=""+uid;
str=filterStr.replaceAll("-", "");
return Integer.parseInt(str);
}
// XXX: replace with java.util.UUID
public static void main(String[] args) {
for (int i = 0; i < 5; i++) {
System.out.println(generateUniqueId());
//generateUniqueId();
}
}
}
希望这有助于你。
独特的在任何时间:
int uniqueId = (int) (System.currentTimeMillis() & 0xfffffff);
不隶属于 StackOverflow