jstack中的tid到底是什么意思呢

我们经常见到类似的jstack信息

"main" #1 prio=5 os_prio=31 tid=0x00007fa63900c800 nid=0x1703 waiting on condition [0x0000700000219000]
   java.lang.Thread.State: TIMED_WAITING (sleeping)
    at java.lang.Thread.sleep(Native Method)
    at Test.main(Test.java:5)

nid=0x1703 nid我们都知道是其实就是进程id。
那tid呢,tid=0x00007fa63900c800 还这么大的一个数字


有人说这个就是java自己的线程id啊,Thread.getId()啊
然后我就测试了下,

 public static void main(String[] args) throws Exception {
        System.out.println("-------------"+Thread.currentThread().getId());

结果是-------------1

多创建几个线程看看,线程id是9啊,10啊,规律就是从1开始一直递增的。

和tid=0x00007fa63900c800 这么大的数字完全对不上啊。


同事给我一个提示,这是不是个内存地址啊。

好像是哦,正好是16个16进制,转成2进制就是16*4=64位,内存地址也是64位。

然后就是使用hsdb工具来查看了:

image.png
image.png

确实是个内存地址,但是不是线程栈开始的位置,而是比较靠后的位置。

这个位置具体是什么意思就后面有机会再看了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容