代码之家  ›  专栏  ›  技术社区  ›  Ben S

thread.getid()全局唯一性问题

  •  11
  • Ben S  · 技术社区  · 16 年前

    如果多个Java应用程序在系统上运行,那么每个线程ID相对于所有其他Java线程都是唯一的,而不管它们运行的应用程序是什么?

    Java应用程序相对于其他Java应用程序应该是沙箱,所以我认为线程ID可能会发生冲突。

    如果线程ID在所有应用程序中都是唯一的,那么它是否会泄漏关于系统上其他应用程序的一些(尽管很小)信息?比如在其他应用程序中已经启动了多少线程,或者甚至其他Java应用程序都在运行?

    2 回复  |  直到 16 年前
        1
  •  23
  •   Michael Myers KitsuneYMG    16 年前

    好吧,让我查一下源头。

    Thread init 方法(由每个构造函数调用):

    /* Set thread ID */
    tid = nextThreadID();
    

    nextThreadID() :

    private static synchronized long nextThreadID() {
        return ++threadSeqNumber;
    }
    

    还有:

    /* For generating thread ID */
    private static long threadSeqNumber;
    

    它从不设置,因此默认为0。

    所以很明显,线程ID号总是从0开始,递增1。换句话说,你的问题的答案是 全球独一无二。

        2
  •  7
  •   Jared    16 年前

    根据JDK源代码,线程ID在给定的JVM中是唯一的——事实上,它只是作为一个运行序列实现的。

    下面是1.6.0_10中的nextThreadID()方法:

    private static synchronized long nextThreadID() {
        return ++threadSeqNumber;
    }
    

    (可能实际上有一个很长的溢出错误,大概从来没有发生过)