Android中Thread.currentThread()。getId()和Process.myTid()之间的区别

时间:2013-11-11 03:22:21

标签: java android multithreading

众所周知

  

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并不强制主机操作系统需要“tid”或getTid()方法,因为另一个操作系统可以通过字符串键来识别其线程(只是一个例子,: ))。然后java用自己的方式识别它的线程,在java范围内分配一个唯一的线程id,如果java提供像Process.setThreadPriority()这样的静态api,那么java scope id绝对是一个参数,但是我们不需要因为我们可以通过调用Thread对象方法setPriority(int priority)来完成此任务。

欢迎任何评论。

更新:

答案都是正确的。但是fadden的评论让我更清楚。谢谢大家。

2 个答案:

答案 0 :(得分:0)

Thread.getId()return id;

其中分配了ID:

Thread.createid = ++Thread.count

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

答案 1 :(得分:0)

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

  • 原生线程,由托管操作系统管理。
  • Java Thread:,由JVM管理并与本机线程通信。