1. 问题来源
我最近在看Java多线程的视频时,主讲老师介绍Thread.getId()
函数,后面演示的时候,说到,“thread ID可能会被重用”。他示范了几次,thread ID都是递增的,问题在当时没有解释清楚,所以我去查了一下源码,在此做一个简单总结。
2. getId()函数
首先API文档中对Thread.getId()
的detail描述,说到当一个线程终止运行后,它的thread ID可能会被重用。但是,问题在于它是怎么被重用的?
然后,我去查了源码(下图是其中一部分,出自java/lang/Thread.java
)。tid
是线程id,threadSeqNumber
是Thread的类变量,Thread构造函数会调用init()
函数,init中有一行代码为tid = nextThreadID()
,所以说,threadSeqNumber
是负责整个线程id分配的,但它是递增的,见nextThreadID()
函数,那么thread ID是怎么被重用的呢?