Android中Thread.currentThread()。getId()和Process.myTid()之间的区别
众所周知
myTid() -
返回调用线程的标识符,该标识符与setThreadPriority(int,int)一起使用。
但我发现Thread.currentThread().getId()
不等于Process.myTid()
。 所以,我猜测前者是JVM版线程id,后者是Linux版线程id。
我对吗? 如果是这样,为什么java会创建自己的线程ID并且不使用Linux线程ID?
更新:
经过进一步的研究和阅读android的源代码,我有了新的认识:
Process.myTid()
是一个平台(OS)相关的操作, Process.setThreadPriority()
也是如此,在本机级别的android中,它们都调用系统调用来实现目标。
但java是一种独立于平台的语言,java不强制主机os需要“tid”或getTid()
方法,因为另一个os可以通过字符串键来识别它的线程(只是一个例子,:))。 然后java用自己的方式识别它的线程,在java范围内分配一个唯一的线程id,如果java提供像Process.setThreadPriority()
那样的静态api,那么java scope id肯定会是一个参数,但是我们不需要因为我们可以通过调用Thread对象方法setPriority(int priority)
来完成此操作。
欢迎任何评论。
更新:
答案都是正确的。 但是fadden的评论让我更清楚。 谢谢你们。
我相信Java环境中有两种类型的线程:
- 本机线程:由托管操作系统管理。
- Java线程:由JVM管理并与本机线程通信。
Thread.getId()
: return id;
其中id被分配:
Thread.create
: id = ++Thread.count
所以, Process.myTid()
是’System tid’,而Thread.getId()
是’Java thread id’