众所周知
myTid() -
Returns the identifier of the calling thread, which be used with setThreadPriority(int, int).
但是我发现 Thread.currentThread().getId()
不等于 Process.myTid()
。所以,我猜前者是 JVM 版本的线程 ID,后者是 Linux 版本的线程 ID。
我说的对吗?如果是这样,为什么java自己做线程id而不用linux线程id呢?
更新:
进一步研究和阅读android的源代码后,我有了新的认识:
Process.myTid()
是一个平台相关的操作,Process.setThreadPriority()
也是,在android的native level source中,它们都调用实现目标的系统调用。
但 java 是一种独立于平台的语言,java 不强制主机操作系统需要一个“tid”或 getTid()
方法,因为另一个操作系统可能通过字符串键识别它的线程(只是一个例子,:))。然后java用自己的方式识别自己的线程,在java范围内分配一个唯一的线程id,如果java提供了一个静态的api,比如Process.setThreadPriority()
,那么java范围id肯定是一个参数,但我们不需要,因为我们可以通过调用 Thread 对象方法 setPriority(int priority)
来做到这一点。
欢迎任何评论。
更新:
答案都是正确的。但是法登的评论让我更清楚了。谢谢大家。
最佳答案
我认为在 Java 环境中有两种类型的线程:
- native 线程:由托管操作系统管理。
- Java 线程:由 JVM 管理并与 native 线程通信。
关于java - Android中Thread.currentThread().getId()和Process.myTid()的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19898321/