java - Android中Thread.currentThread().getId()和Process.myTid()的区别

标签 java android multithreading

众所周知

myTid() - Returns the identifier of the calling thread, which be used with setThreadPriority(int, int).

但是我发现 Thread.currentThread().getId() 不等于 Process.myTid()。所以,我猜前者是 JVM 版本的线程 ID,后者是 Linux 版本的线程 ID。

我说的对吗?如果是这样,为什么java自己做线程id而不用linux线程id呢?

更新:

进一步研究和阅读android的源代码后,我有了新的认识:

Process.myTid()是一个平台相关的操作,Process.setThreadPriority()也是,在android的native level source中,它们都调用实现目标的系统调用。

但 java 是一种独立于平台的语言,java 不强制主机操作系统需要一个“tid”或 getTid() 方法,因为另一个操作系统可能通过字符串键识别它的线程(只是一个例子,:))。然后java用自己的方式识别自己的线程,在java范围内分配一个唯一的线程id,如果java提供了一个静态的api,比如Process.setThreadPriority(),那么java范围id肯定是一个参数,但我们不需要,因为我们可以通过调用 Thread 对象方法 setPriority(int priority) 来做到这一点。

欢迎任何评论。

更新:

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

最佳答案

我认为在 Java 环境中有两种类型的线程:

  • native 线程:由托管操作系统管理。
  • Java 线程:由 JVM 管理并与 native 线程通信。

关于java - Android中Thread.currentThread().getId()和Process.myTid()的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19898321/

相关文章:

java - 无法使用循环发送大量短信

java - 在 onCreate 方法上插入默认数据库条目

android - 是否可以通过套接字连接在Cordova和Native Android之间进行通信?

android - 使用 Nmap 进行移动设备识别

java:为什么两个线程不并行执行

java - 如何在代码中获取 Java SSL 连接的实际 block 密码 key 大小?

java - Appium框架中的非法参数异常

android - 错误 : incompatible types: View cannot be converted to TextView and Error:Execution failed for task ':app:compileDebugJavaWithJavac'

c++ - 使用 Win32 线程模型时,MinGW-w64 是否支持开箱即用的 std::thread?

java - Java中的多线程矩阵乘法