如何解决Android中Thread.currentThreadgetId和Process.myTid之间的区别
我相信Java环境中有两种类型的线程:
- 由托管操作系统管理。
- 由JVM管理并与本机线程通信。
解决方法
众所周知
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提供了像这样的静态api
Process.setThreadPriority()
,则Java作用域ID肯定是一个参数,但是我们不需要,因为我们可以通过调用来实现线程对象方法setPriority(int
priority)
。
欢迎任何评论。
更新:
答案都是正确的。但是法登的评论使我更加清楚。谢谢你们。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。