众所周知
myTid() -
返回调用线程的标识符,与 setThreadPriority(int, int) 一起使用。
但是我发现Thread.currentThread().getId()
不等于Process.myTid()
。所以,我猜前者是 JVM 版本的线程 ID,而后者是 Linux 版本的线程 ID。
我对吗?如果是这样,为什么java会创建自己的线程ID而不使用Linux线程ID?
更新:
经过进一步研究和阅读android的源代码,我有了新的认识:
Process.myTid()
是平台(OS)相关的操作,Process.setThreadPriority()
在android的native level source中也是如此,它们都调用系统调用来实现目标。
但是java是一种独立于平台的语言,java并不强制宿主操作系统需要一个“tid”或一个getTid()
方法,因为另一个操作系统可能通过一个字符串键来识别它的线程(只是一个例子,:))。然后java用自己的方式识别它的线程,在java范围内分配一个唯一的线程id,如果java提供了一个静态api like Process.setThreadPriority()
,那么java范围id肯定是一个参数,但我们不需要,因为我们可以通过调用来做到这一点一个线程对象方法setPriority(int priority)
。
欢迎任何评论。
更新:
答案都是对的。但是fadden的评论让我更加清楚。谢谢你们。