在Thread类中加载start0()本机方法的本机代码库

时间:2013-06-13 12:03:24

标签: java

我正在寻找一些深入的解释,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()但是我看不到任何与加载本机代码库相关的代码。

请帮助我理解完整的呼叫流程。

谢谢, 的Sandip

2 个答案:

答案 0 :(得分:5)

Java is open source.。一项小型研究也可以为您提供本机代码的源代码。看,你可以看到自己的流程。请参阅Where to find source code for java.lang native methods?

根据:Java native method source code使用jdk7 source

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源中,我们可以看到一些本机方法声明。

答案 1 :(得分:0)

查看OpenJDK JVM源:Thread.cjvm.cppJVM_StartThread