当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《Thread.getId()全局唯一性问题》经验,为你挑选了2个好方法。

如果系统上运行多个Java应用程序,那么每个线程ID相对于所有其他Java线程是唯一的,无论它们在哪个应用程序中运行?

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

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



1> Michael Myer..:

好吧,让我查一下来源.

Thread's 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> Jared..:

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

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

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

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


你是否暗示JVM不够强大,无法活292,277千年?:P
如果我们可以每0.99999毫秒创建一个线程,那就没有了.
推荐阅读
重庆制造漫画社
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有