2016-07-13 35 views
0

我想在多線程應用程序中使用System.currentTimeMillis()的結果來生成唯一的ID。這是我的代碼:Java多線程。在不同的線程上使用相同的System.currentTimeMillis()值

class MyRunnableClass implements Runnable{ 
     @Override 
     public void run() { 
      long thisValueShouldBeUnique = System.currentTimeMillis(); 
     } 
    } 

我啓動了10個運行MyRunnableClass對象的run()方法的線程。 是不是真的,有時System.currentTimeMillis()在不同線程中的結果可能是一樣的?

+0

唯一的id是什麼?主題? –

+0

極有可能,您可能會將某個線程標識符連接到您的唯一值 –

+1

如果您是啓動線程的人,爲什麼不在初始化時爲其提供唯一ID?您也可以使用Thread.currentThread()。getId() –

回答

3

函數System.currentTimeMillis()以毫秒爲單位返回當前時間。所以如果你的線程在同一毫秒內運行,是的,這個函數將返回相同的結果。所以你可以生成這樣的UUID:UUID.randomUUID()

+1

或更簡單的'atomicLong.getAndIncrement();' – assylias

+0

是的,你可以,如果你想只是一個簡單的可增量ID – Creart

1

今天的CPU可以每秒處理大約100,000,000,000條指令,所以答案肯定是「是的,確實有時在不同線程中System.currentTimeMillis()的結果可能是相同的」。