众所周知
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的评论让我更清楚。谢谢大家。
答案 0 :(得分:0)
Thread.getId()
:return id;
其中分配了ID:
Thread.create
:id = ++Thread.count
所以,Process.myTid()
是'System tid',Thread.getId()
是'Java thread id'
答案 1 :(得分:0)
我相信Java环境中有两种类型的线程: