0

Hi I have one synchronized method which returns ms. Can anyone tell whether where each object will get the unique value in below code.

public static synchronized Long generateIdforDCR() 
         {  
        int val= return System.nanoTime();
        } 

Call will be in another class like

forloop 1... 1000
{
   ClassName cn=new ClassName();
   cn.generateIdforDCR();

}

Will i get unique value always.

4

1 回答 1

1

否 - 不能保证每次调用都会返回不同的值。调用(包括同步)所花费的时间可能少于用于nanoTime(). (事实上​​,我可以在我的笔记本电脑上看到这种情况。)

听起来您应该只使用 an AtomicLong

private static final AtomicLong counter = new AtomicLong();

public static Long generateIdforDCR() {
    return counter.incrementAndGet();
}

这将在该运行中为您提供一个唯一编号(如果您调用它的次数少于 2 64次)。如果您需要它在更大范围内是唯一的(例如,跨多个顺序运行,或者可能是不同进程的多个并发运行),那么您将需要一种稍微不同的方法。

于 2013-10-16T19:05:07.257 回答