Thread.getId()全局唯一性问题

时间:2009-02-26 17:44:12

标签: java multithreading uniqueidentifier

如果系统上运行多个Java应用程序,那么每个线程ID是否都与所有其他Java线程相关,无论它们在哪个应用程序中运行?

Java应用程序相对于其他Java应用程序应该是沙盒子,因此我认为线程ID可能会发生冲突。

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

2 个答案:

答案 0 :(得分:23)

好吧,让我查一下来源。

Thread的{​​{1}}方法中(由每个构造函数调用):

init

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

nextThreadID()

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

永远不会设置,因此默认为0。

所以显然线程ID号始终从0开始并递增1.换句话说,你的问题的答案是它们全局唯一。

答案 1 :(得分:7)

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

这是1.6.0_10中的nextThreadID()方法:

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

(实际上可能存在一个很长的溢出错误,大概它从未发生过)