2013-06-13 37 views
4

我在尋找一些深入的解釋Thread.start()如何在內部調用run()方法。我知道它我的JVM其內部調用通過啓動的run()()方法,當我開始檢查Thread類的源代碼,我發現這些代碼如下:在Thread類中爲start0()本機方法加載本機代碼庫

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

    private native void start0(); 

現在我可以看到啓動()正在調用本機方法start0(),但我看不到任何與加載本地代碼庫相關的代碼。

請幫我理解完整的通話流程。

感謝, 的Sandip

回答

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源中,我們可以看到一些本地方法聲明。

+2

我的 「小調查」 導致我在這裏。明智的問題海事組織。 – 8bitjunkie

+0

@ 7SpecialGems哈哈...它經常發生在stackoverflow :) – pinkpanther