众所周知:
myTid() -
返回调用线程的标识符,可与 setThreadPriority(int, int) 一起使用。
但我发现 Thread.currentThread().getId()
不等于 Process.myTid()
。因此,我猜前者是 JVM 版本的线程 ID,后者是 Linux 版本的线程 ID。
我对吗?如果是这样,为什么 Java 要创建自己的线程 ID,而不使用 Linux 的线程 ID 呢?
更新:
经过进一步的研究和阅读 Android 源代码,我有了新的认识:
Process.myTid()
是一个与平台(操作系统)相关的操作,Process.setThreadPriority()
也是如此,在 Android 的本地级别源代码中,它们都调用了一个系统调用来实现目标。
但是 Java 是一种与平台无关的语言,Java 不强制主机操作系统需要一个“tid”或 getTid()
方法,因为另一个操作系统可能通过字符串键(只是一个示例,:)) 来标识其线程。然后 Java 用自己的方式标识其线程,在 Java 范围内分配唯一的线程 ID,如果 Java 提供了一个静态 API,如 Process.setThreadPriority()
,那么 Java 范围的 ID 明显将是一个参数,但我们不需要这样做,因为我们可以通过调用 Thread 对象方法 setPriority(int priority)
来实现这一点。
欢迎任何评论。
更新:
所有答案都是正确的。但是 fadden 的评论让我更加清晰。谢谢大家。
Process.myPid()
返回进程 ID。Process.myTid()
是另一回事。 - Eng.Fouad