什么';Java线程转储中线程的顺序是什么?
什么定义了线程转储中线程的顺序 当我们在java中进行线程转储时。我试图理解java程序的行为。(jdk8) 使用什么';Java线程转储中线程的顺序是什么?,java,multithreading,stack,Java,Multithreading,Stack,什么定义了线程转储中线程的顺序 当我们在java中进行线程转储时。我试图理解java程序的行为。(jdk8) 使用jdk\bin\jstack命令执行线程转储 小例子: 2019-06-19 09:37:56 全线程转储Java热点(TM)64位服务器VM(25.161-b12) 模式): “螺纹xyz”#8317 prio=5 跟踪…xyz “螺纹abc”#8316 prio=5 追踪……abc 我想了解是什么决定了线程转储中线程thread\u abc之后的输出顺序。如果您想比较线程转储(甚
jdk\bin\jstack
命令执行线程转储
小例子:
2019-06-19 09:37:56
全线程转储Java热点(TM)64位服务器VM(25.161-b12)
模式):
“螺纹xyz”#8317 prio=5
跟踪…xyz
“螺纹abc”#8316 prio=5
追踪……abc
我想了解是什么决定了线程转储中线程
thread\u abc
之后的输出顺序。如果您想比较线程转储(甚至只是看看其中发生了什么),最简单的方法是创建转储并使用免费的在线分析器,如或。他们将其可视化的方式通常有助于找到热点
什么定义了线程转储中线程的顺序
我怀疑这个问题的答案在很大程度上取决于JDK版本,甚至可能取决于操作系统的实现
查看Linux下的java-1.7.0-openjdk-1.7.0.141
和java-1.8.0-openjdk-1.8.0.131
版本,堆栈跟踪似乎是按线程id按相反顺序排序的
"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++。我很好奇为什么顺序对您很重要?你想在线程转储中找到什么?谢谢你的编辑。我试图比较两个线程转储,进程的良好状态和不良状态。我猜最忙的线程在顶部,但不确定。谢谢。这些都非常有用。esp比较差异。但是在我的例子中,线程转储几乎相同,除了顺序。谢谢,这是有意义的。我在这里找到了更多的分析