Thread.currentThread()如何工作?

max*_*335 13 java multithreading

Thread.currentThread()是一个静态方法,它提供对当前正在执行的Thread的引用(基本上是对'this'线程的引用).

this在Java中无法访问静态方法中的非静态成员(特别是),因此currentThread()是本机方法.

currentThread()方法如何在幕后工作?

Mar*_*nik 8

(basically a reference to 'this' thread)
Run Code Online (Sandbox Code Playgroud)

错误.这里没有this涉及参考.

您正在将一个线程混合为本机资源,这意味着执行线程 ; 而且Thread,这是一个Java类.线程代码不在" Thread实例内"运行,该实例只是Java的线程控制的句柄.就像File实例不是文件一样.

因此,Thread.currentThread()您可以检索Thread负责调用该方法的执行线程的实例.除非您正在探索特定JVM实现的细节,否则Java究竟是如何实现这个实现细节的,不应该是您关注的问题.

  • `Thread.currentThread()`是OpenJDK中的本机方法.我没有尝试过找到C源代码,但是我的方法就是这样:我在固定内存位置有一个表,其中包含有关所有线程堆栈的信息.该信息将包括堆栈基址的地址,堆栈的最大大小以及与堆栈关联的"Thread"对象的ID.`Thread.currentThread()`只需要在其激活记录中获取任何局部变量的地址,然后查询表以确定它属于哪个堆栈,因此返回哪个`Thread`. (3认同)
  • 说“不涉及 this 引用”并不完全准确,因为 `this == Thread.currentThread()` 在某些情况下成立。`Thread.currentThread()` 可能会返回您曾经创建并具有一定控制权的实例,或者已为您创建的其他 `Thread` 对象。 (2认同)