問十:源碼層面解析Thread中run()和start()的區別?

分析start()的源碼:

調用start0()方法

    

是一個native方法

進入http://hg.openjdk.java.net/jdk8u源碼頁查看其native方法的源碼

進入share目錄,找到Thread.c

發現其調用了JVM_StartThread方法

通過查看其頂部引用,定位jvm.h

進入jvm.h進行查看

在JVM_StartThread中,新建了一個JavaThread,這個方法還調用了thread_entry方法

找到thread_entry方法

發現在這個方法中,執行了線程中的run()方法

 

總結之後就是:在調用start方法時,會調用JVM的JVM_StartThread,去創建一個新的子線程,再通過thread_entry方法去調用run()方法

 

回答:

調用start()方法會創建一個新的子線程並且啓動

run()方法只是THread的一個普通方法的調用

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章