首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java线程ID:非常高的数字

Java线程ID:非常高的数字
EN

Stack Overflow用户
提问于 2022-06-30 09:50:00
回答 1查看 187关注 0票数 1

我在Tomcat中运行了一个Java应用程序(1.8)。应用程序记录到一个日志文件,包括线程ID: 06/30 11: 30 :51 (101970) userInfo Jun 30:30:51 CEST 2022 INFO some.class.name [] -一些日志消息

最近我注意到线程Id变得非常大(1600000 +),我想知道这是否表明线程池(即线程没有返回到池)出现了问题。

根据Thread类,ID应该是一个正在增加的唯一数字(并且可能被重用)。我认为这意味着只有在必须创建新的额外线程时,ID才会增加。

不过,我目前正在监视线程计数(通过ThreadMXBean),并发现线程id号远远高于峰值线程计数。

是否有人了解线程id是如何创建的,以及高线程id与线程数量之间是否有关联?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-06-30 10:36:52

java.lang.Thread中,我们看到以下非常简单的小代码:

代码语言:javascript
复制
/* For generating thread ID */
private static long threadSeqNumber;

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

这意味着,每次创建一个新线程时,都会发出一个新id,而不管以前创建的线程是否已经终止。这意味着线程id将永远不会被重用,我推测线程id是long,唯一的目的是保证线程id永远不会用完。

现在,线程池以及JVM的其他功能一直在创建和销毁线程。例如,如果一个线程池已经有一段时间没有使用它的一个线程,它可能会销毁该线程,并在稍后发现它有用途时重新创建它。

这意味着当您的软件持续运行数小时时,您将不可避免地看到越来越高的线程ids。这很正常。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72813697

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档