【问题标题】:Loading of the native code library for start0() native method in Thread class [duplicate]为 Thread 类中的 start0() 本机方法加载本机代码库 [重复]
【发布时间】:2013-06-09 19:28:18
【问题描述】:

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

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

谢谢, 沙迪普

【问题讨论】:

标签: java


【解决方案1】:

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

【讨论】:

  • 我的“小研究”把我带到了这里。明智的问题 IMO。
  • @7SpecialGems 哈哈......它经常发生在stackoverflow :)
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2016-02-28
    • 2018-06-24
    • 2013-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-19
    • 1970-01-01
    相关资源
    最近更新 更多