首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java线程转储中线程的顺序是什么?

Java线程转储中线程的顺序是什么?
EN

Stack Overflow用户
提问于 2019-07-24 12:57:45
回答 2查看 485关注 0票数 0

什么定义线程转储中线程的顺序?

当我们在java中使用线程转储时。我正试图用java程序来理解行为。(jdk8)

使用jdk\bin\jstack命令获取线程转储。

小例子:

2019-06-19 09:37:56 全线程转储Java HotSpot(TM) 64位服务器VM (25.161-b12混合模式): "thread_xyz“#8317 prio=5 trace...xyz "thread_abc“#8316 prio=5 trace...abc

我想了解是什么决定了线程转储中线程thread_abc之后的输出thread_xyz的顺序。

EN

回答 2

Stack Overflow用户

发布于 2019-07-24 21:22:32

什么定义线程转储中线程的顺序?

我怀疑这个问题的答案在很大程度上取决于JDK版本,甚至是操作系统的实现。

看看Linux下的java-1.7.0-openjdk-1.7.0.141java-1.8.0-openjdk-1.8.0.131版本,看起来堆栈跟踪是由线程id按相反顺序排序的。

代码语言:javascript
复制
"foo2" #11 prio=5 os_prio=0 tid=0x00007f595010c800 ...
"foo" #10 prio=5 os_prio=0 tid=0x00007f595010b000 ...
"Service Thread" #9 daemon prio=9 os_prio=0 tid=0x00007f59500e5000 ...
"C1 CompilerThread3" #8 daemon prio=9 os_prio=0 tid=0x00007f59500d8000 ...
"C2 CompilerThread2" #7 daemon prio=9 os_prio=0 tid=0x00007f59500d6000 ...
"C2 CompilerThread1" #6 daemon prio=9 os_prio=0 tid=0x00007f59500d4000 ...
"C2 CompilerThread0" #5 daemon prio=9 os_prio=0 tid=0x00007f59500c6800 ...
"Signal Dispatcher" #4 daemon prio=9 os_prio=0 tid=0x00007f59500c4800 ...
"Finalizer" #3 daemon prio=8 os_prio=0 tid=0x00007f595009b000 ...
"Reference Handler" #2 daemon prio=10 os_prio=0 tid=0x00007f5950096800 ...
"main" #1 prio=5 os_prio=0 tid=0x00007f5950008000 ...
"VM Thread" os_prio=0 tid=0x00007f595008c800 ...
"GC task thread#0 (ParallelGC)" os_prio=0 tid=0x00007f595001d800 ...
"GC task thread#1 (ParallelGC)" os_prio=0 tid=0x00007f595001f000 ...
...
"VM Periodic Task Thread" os_prio=0 tid=0x00007f59500e8000 ...

请注意,有许多“内部”线程似乎根本没有列表中的数字。

此外,在这些版本的java中,线程id是在线程构造函数中完成的同步long++。

票数 1
EN

Stack Overflow用户

发布于 2019-07-24 13:42:25

如果您想比较线程转储(甚至只是查看其中发生了什么),最简单的方法是创建转储并使用免费的在线分析器,如fastthread.iojstack.view。他们想象它的方式通常有助于寻找热点。

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

https://stackoverflow.com/questions/57183536

复制
相关文章

相似问题

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