当前位置: 首页 > 面试题库 >

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

皇甫树
2023-03-14
问题内容

众所周知

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)

欢迎任何评论。

更新:

答案都是正确的。但是法登的评论使我更加清楚。谢谢你们。


问题答案:

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

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


 类似资料:
  • 问题内容: 这些通话实际上对会话意味着什么? 输出值 问题答案: 在服务方法内部,我们请求会话,并且所有事情都会自动获取,就像创建HttpSession对象一样。无需生成唯一的会话ID。无需创建新的Cookie对象。一切都会在后台自动发生。 调用请求对象的方法后,容器将立即创建会话的新对象,并生成一个唯一的会话ID来维护会话。该会话ID被传输回响应对象,以便每当客户端发出任何请求时,它也应将会话I

  • 问题内容: @id/和之间的区别是什么@+id/? 在@+id/加号中+指示创建一个新的资源名称并将其添加到R.java文件中,但是那又如何@id/呢?从:的文档中,ID当引用Android资源时ID,不需要加号,但必须添加android包名称空间,如下所示: 但是在下面的图像中,Eclipse并未提出任何建议@android:id/。 该图显示了对@ / id和@ + / id的建议 是和一样吗

  • 本文向大家介绍Android中的Parcelable和Serializable之间的区别,包括了Android中的Parcelable和Serializable之间的区别的使用技巧和注意事项,需要的朋友参考一下 本示例演示了Android中可打包和可序列化之间的区别 可序列化 可序列化是一个可标记的接口,或者我们可以将其称为空接口。它没有任何预先实现的方法。可序列化将把一个对象转换为字节流。因此,

  • hiii 我是机器人开发中的新手。谁能告诉我什么是编译SdkVersion和buildTollsVersion在构建工具版本中定义。 这是正确的定义吗。。?如果不是,那会导致什么。。? 请帮忙谢谢

  • 有什么区别?公共布尔onKeyDown(int-keyCode,KeyEvent-event)参数是keyCode,按钮,用户按下,但是KeyEvent是什么?

  • 问题内容: 我有两个问题,可能需要一些帮助来理解它们。 和之间有什么区别?我知道这 意味着在单独的外壳中运行命令,然后将其传递给变量。有人可以帮助我理解这一点吗?如果我错了,请纠正我。 如果我们可以使用并且效果很好,那我为什么不能使用它呢?两者的执行周期有何不同? 问题答案: 语法是令牌级别的,因此美元符号的含义取决于其所在的令牌。表达式是现代代名词,代表命令替换;这意味着运行并将其输出放在此处。