3

众所周知

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的评论让我更加清楚。谢谢你们。

4

2 回答 2

0

Thread.getId()return id;

分配 id 的位置:

Thread.createid = ++Thread.count

所以,Process.myTid()是“系统 tid”,Thread.getId()是“Java 线程 id”

于 2013-11-11T03:32:08.050 回答
0

我相信Java环境中有两种类型的线程:

  • 本机线程:由托管操作系统管理。
  • Java Thread:由JVM管理,与本机线程通信。
于 2013-11-11T03:33:13.963 回答