[英]How to Generate Unique ID in Java (Integer)?
java - 如何在java中生成不猜测下一个数字的整数的唯一ID?
它有多独特?
如果它在进程中只是唯一的,那么每次需要新值时,都可以使用AtomicInteger
并调用incrementAndGet()
。
int uniqueId = 0;
int getUniqueId()
{
return uniqueId++;
}
如果您希望它是线程安全的,请添加synchronized
。
如果你有点受限制,这很容易。
如果你有一个线程,你只需使用uniqueID ++; 退出时一定要存储当前的uniqueID。
如果您有多个线程,则可以使用公共同步的generateUniqueID方法(实现与上面相同)。
问题是当你有很多CPU时 - 无论是在集群中还是在某些分布式设置中,比如点对点游戏。
在这种情况下,您通常可以将两个部分组合在一起形成一个数字。 例如,生成唯一ID的每个进程都可以分配自己的2字节ID号,然后将其与唯一ID ++组合。 就像是:
return (myID << 16) & uniqueID++
分发“myID”部分可能很棘手,但有一些方法。 您可以从集中式数据库中获取一个,从中央服务器请求唯一ID,...
如果你有一个Long而不是一个Int,其中一个常见的技巧是获取ETH0的设备ID(UUID),保证服务器是唯一的 - 然后只需添加一个序列号。
如果你真的是指整数而不是int:
Integer id = new Integer(42); // will not == any other Integer
如果您希望JVM外部可见其他进程或用户,持久性或许多其他注意事项,那么还有其他方法,但如果没有上下文,您可能最好使用内部对象标识的唯一性你的系统。
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();
}
}
}
希望这对你有所帮助。
只需生成ID并检查它是否已存在于生成的ID列表中。
你需要它吗?
如果只需要 int 那么 AtomicInteger 可以使它成为可能。
如果需要字符串,那么下面的代码应该通过混合 timeStamp 和 AtomicLong 来工作。
AtomicLong idCounter = new AtomicLong(100);
long timestamp = System.currentTimeMillis();
long nextLong = idCounter.incrementAndGet();
String randomId = String.valueOf(timestamp)+String.valueOf(nextLong);
随时独特:
int uniqueId = (int) (System.currentTimeMillis() & 0xfffffff);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.