【问题标题】:Java multithreading. Same System.currentTimeMillis() values on different threads [duplicate]Java 多线程。不同线程上的相同 System.currentTimeMillis() 值[重复]
【发布时间】:2016-11-15 20:18:40
【问题描述】:

我想在多线程应用程序中使用System.currentTimeMillis() 的结果来生成唯一ID。这是我的代码:

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

我启动了 10 个运行 MyRunnableClass 对象 run() 方法的线程。 是不是,有时候System.currentTimeMillis ()在不同线程中的结果可能是一样的?

【问题讨论】:

  • 唯一 ID 是什么?线程?
  • 很有可能,您可以将一些线程标识符连接到您的唯一值
  • 如果你是启动线程的人,为什么不在初始化时给它们一个唯一的 ID?你也可以使用 Thread.currentThread().getId()
  • 如果您想要唯一性,请使用 GUID 而不是时间戳。

标签: java multithreading time


【解决方案1】:

今天的 CPU 每秒可以处理大约 100,000,000,000 条指令,所以答案肯定是“是的,确实有时 System.currentTimeMillis() 在不同线程中的结果可能相同”。

【讨论】:

    【解决方案2】:

    函数System.currentTimeMillis() 以毫秒为单位返回当前时间。因此,如果您的线程在同一毫秒内运行,是的,此函数将返回相同的结果。所以你可以生成这样的 UUID:UUID.randomUUID()

    【讨论】:

    • 或更简单的atomicLong.getAndIncrement();
    • 可以,如果您只想要一个简单的可递增 ID
    猜你喜欢
    • 1970-01-01
    • 2015-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-26
    • 2012-04-05
    • 2021-05-23
    相关资源
    最近更新 更多