java 中thread 获取线程id为啥默认从10开始

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 中thread 获取线程id为啥默认从10开始相关的知识,希望对你有一定的参考价值。

参考技术A

从源码中分析线程的id是从0开始的

参考技术B tid是jvm决定的,一般jvm启动时会保留一些id给自己使用。
如你所说,这个数字正好是10

在编码的过程中你完全不用关心这个数字,这个数字由jvm维护且自增。当某个线程销毁后它的id可能会被重用

如何在 Java 中获取线程 NID(本机 ID)

【中文标题】如何在 Java 中获取线程 NID(本机 ID)【英文标题】:How To Get Thread NID(Native ID) in java 【发布时间】:2015-12-11 07:08:36 【问题描述】:

“remoting-jmx client-thread-4”守护进程prio=6 tid=0x000000000f86b000 nid=0x20e0 >等待条件[0x000000000b82e000] java.lang.Thread.State:TIMED_WAITING(停车) 在 sun.misc.Unsafe.park(本机方法) - 停车等待 (a >java.util.concurrent.SynchronousQueue$TransferStack) 在 java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:226) 在 >java.util.concurrent.SynchronousQueue$TransferStack.awaitFulfill(SynchronousQue>ue.java:460) 在 >java.util.concurrent.SynchronousQueue$TransferStack.transfer(SynchronousQueue.j>ava:359) 在 java.util.concurrent.SynchronousQueue.poll(SynchronousQueue.java:942) 在 >java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1068) 在 >java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130) 在 >java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 在 java.lang.Thread.run(Thread.java:745)

在这个线程转储中,我们有线程 Nid。这个 Nid 我如何从 java 代码中的线程中获取它。

【问题讨论】:

你不能。它没有 API。 【参考方案1】:

这是一个gist,它显示了如果您可以在应用程序中包含来自project lombok 的lombok.jar 和来自JDK 的sa-jdi.jar,如何获取NID。

【讨论】:

以上是关于java 中thread 获取线程id为啥默认从10开始的主要内容,如果未能解决你的问题,请参考以下文章

如何获得thread线程的threadlocals的key值

Java如何获取正在运行的线程的Id

从线程中获取线程 ID

继承java.lang.Thread类并重写run方法为啥不可以创建一个新线程呢!为啥?

如何在 Java 中获取线程 NID(本机 ID)

java线程只能被启动(Thread.start())一次,那么为啥线程池中的线程能被重复利用呢?