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.createid = ++Thread.count

所以, Process.myTid()是’System tid’,而Thread.getId()是’Java thread id’