java即使是同步的方法也会生成相同的UUID
我知道很多人不会相信这一点,但我目前面临的一个问题是,即使生成UUID的方法是同步的,我也会得到相同的UUID
private synchronized String generateUUID() {
return UUID.randomUUID().toString();
}
现在,我的应用程序将记录存储在数据库中(并行、多线程),并且可以将此UUID视为唯一密钥的一部分。即使线程之间的时差为1ns,我希望此方法在保留记录之前返回实际生成的唯一字符串
我是否有办法保证这个唯一ID的生成实际上是唯一的
# 1 楼答案
免责声明:这是不应该发生的,这个解决方案只是一个黑客让你继续前进,直到你解决了根本的问题
编辑:顺便说一下,这是一个很好的方法,可以帮助您排除故障,因为您可以验证该方法是否被多次调用
# 2 楼答案
我用jdk1测试了以下代码。7.0_76和jdk1。6.0_75:
我得到了以下结果:
你在使用哪个JDK?你能用JDK试试这段代码吗?此外,我还测试了有无同步。另外,我做了静态测试,但可以在没有静态测试的情况下进行测试