5

我正在寻找一些深入的解释 Thread.start() 如何在内部调用 run() 方法。我知道它是我的 JVM,它通过 start() 方法在内部调用 run(),当我开始检查 Thread 类的源代码时,我发现以下代码:

    public synchronized void start()
    {
        if(threadStatus != 0)
            throw new IllegalThreadStateException();
        group.add(this);
        start0();
        if(stopBeforeStart)
            stop0(throwableFromStop);
    }

    private native void start0(); 

现在我可以看到 start() 正在调用本机方法 start0() 但我看不到任何与加载本机代码库相关的代码。

请帮助我了解完整的通话流程。

谢谢,桑迪普

4

2 回答 2

5

Java 是开源的。. 一个小的研究也可以为您带来本机代码的源代码。看,你可以看到自己的流动。请参阅在哪里可以找到 java.lang 本机方法的源代码?.

根据:Java原生方法源码 使用jdk7源码

JDK 7 的 Thread.c:http ://hg.openjdk.java.net/jdk7/jdk7/jdk/file/00cd9dc3c2b5/src/share/native/java/lang/Thread.c

据我所知,查找本机代码以查看发生了什么并不像查找您所见过的 Java 代码那么有趣。

因为,尽管他们鼓励我们不要使用native code,但他们使用它是因为jdk针对不同平台发布的版本不同。在大多数jdk来源中,我们可以看到一些本机方法声明。

于 2013-06-13T12:24:12.600 回答
1

查看 OpenJDK JVM 源代码:Thread.cjvm.cpp ( JVM_StartThread)

于 2013-06-13T12:45:09.710 回答