所以我正在研究Executor Service的内部工作,在线程的构造函数中提到了这些行:
Thread(ThreadGroup g, String name, int characteristics, Runnable task,
long stackSize, AccessControlContext acc) {
Thread parent = currentThread();
boolean attached = (parent == this); // primordial or JNI attached
所以我的问题是,当前正在运行的线程怎么可能等于线程的新实例?
currentThread()
正在返回...当前正在执行的线程。
在
Thread
构造函数中,this
将是正在构造的 Thread
object。 这通常不是“执行”线程。 您在此处创建的 Thread
通常会在调用 start()
时开始执行。但是......这里有一些情况并非如此。
引导 JVM 时会发生一种情况。 引导涉及在所有 JVM 基础设施运行之前创建某些 Java 对象。 这些对象之一是原始线程的
Thread
对象;即正在执行引导的线程。 引导代码将执行以下操作:
创建一个 JavaThread
currentThread()
Thread
对象。使用适当的参数在 Thread
根据该评论,其他场景显然涉及 JNI。 我不确定,但当 C 或 C++ 应用程序调用
JNI_CreateJavaVM
时可能会发生这种情况。