代码之家  ›  专栏  ›  技术社区  ›  Uri

是否可以为特定的JVM实例获取真正唯一的id?

  •  14
  • Uri  · 技术社区  · 16 年前

    也就是说,如果我有两个jvm同时在同一台机器上运行,那么每个jvm都是可区分的。 它还与在其他机器上运行jvm和将来在同一台机器上执行(即使进程id被重用)也有区别。

    我想我可以通过识别开始时间、机器MAC和进程id,并以某种方式组合它们来实现类似的功能。我想知道是否有标准的方法来达到这个目的。

    更新 :我看到每个人都为整个会话推荐了一个UUID。这似乎是个好主意,不过可能有点太重了。不过,我的问题是:我想使用jvmid在每个JVM执行中创建多个惟一的标识符,这些标识符以某种方式合并了JVM实例。

    我的理解是,你不应该真的将其他数字混合到UUID中,因为不再保证唯一性。另一种方法是将UUID变成一个字符串并将其链接起来,但是这样它就变得太长了。有什么办法克服这个问题吗?

    5 回复  |  直到 16 年前
        1
  •  11
  •   Jesper    16 年前

    你可以生成一个 UUID 在程序开始时使用,并在程序运行期间使用它。

    UUID id = UUID.randomUUID();
    

    randomUUID() 还有其他方法可以生成 UUID公司 可能更适合您的需求,请参阅类的API文档 java.util.UUID 了解更多信息。

        2
  •  4
  •   Pierre-Jean Coudert    16 年前

    您可以在应用程序启动时创建一个UUID并将其用于标识。

    UUID唯一ID=随机UUID();

        3
  •  2
  •   Stephen C    16 年前

    如果uuid的权重太重,您需要回顾一下您所说的“唯一且永久”的含义。

    例如,如果要将“unique and permanent”限制为对给定网络上的机器来说是唯一的,并且在接下来的(比如)10年内是永久的,那么您可以使用UUID生成中使用的相同方法,但是使用更少的位。

    或者,如果您要创建一个具有持久性存储的惟一id生成服务,并将“永久性”的概念与该存储的生存期联系起来,那么惟一id可以是一个递增的整数序列。

        4
  •  1
  •   Victor Sorokin    16 年前

    为什么不使用Singleton持有的实例 java.rmi.server.UID

        5
  •  1
  •   Thorbjørn Ravn Andersen    16 年前

    我不知道这方面的标准库,但是您可以自己完成启动时间(使用新的日期类型()和系统电流毫秒)、安装路径和JVM路径(考虑将所有系统.getProperties()).

    推荐文章