唯一值的java对象锁
嗨,我有一个同步的方法,它返回ms。有人能告诉我,在下面的代码中,每个对象在哪里会得到唯一的值吗
public static synchronized Long generateIdforDCR()
{
int val= return System.nanoTime();
}
调用将在另一个类中,如
forloop 1... 1000
{
ClassName cn=new ClassName();
cn.generateIdforDCR();
}
我将永远得到唯一的价值
# 1 楼答案
否-不能保证每个调用都会返回不同的值。调用(包括同步)所花费的时间比用于
nanoTime()
的内部时钟的粒度要少,这不是不可想象的。(事实上,我可以在笔记本电脑上看到这种情况。)听起来您应该使用^{} 来代替:
这将为您提供一个唯一的号码(如果您在该运行中调用该号码的次数少于2次64次)。如果您需要它在更大范围内是唯一的(例如,跨多个连续运行,或者可能是不同进程的多个并发运行),那么您需要一种稍微不同的方法