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

San*_*ndy 4 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(); 
Run Code Online (Sandbox Code Playgroud)

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

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

谢谢,Sandip

pin*_*her 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源代码中,我们可以看到一些本机方法声明.

  • 我的"小研究"把我带到了这里.明智的问题IMO. (2认同)