2013-07-16 21 views
20

我的導師告訴我主線程是每個線程的父線程,但他無法解釋爲什麼。Java中main()方法和主線程之間的關係是什麼?

當我寫一個簡單的程序:

Class A{} 

然後在執行時,它拋出一個異常:

java.lang.NoSuchMethodError: main Exception in thread "main" 

是否有該main()方法和主線程之間的關係?

+3

您的導師是錯誤的。 Java線程之間沒有父子關係。 – EJP

+0

當然,線程main是應用程序的開始,JVM創建一個[thread(main)](http://www.codeproject.com/Articles/616109/Java-Thread-Tutorial#maintr)並調用靜態main class by it – 2013-07-16 06:10:01

+5

@EJP:「錯」是苛刻的。雖然線程不承載這種關係,但可以說所有用戶線程都是從主線程產生(直接或間接)。 – Thilo

回答

37

main()方法和主線程之間是否有任何關係?

當JVM啓動時,它創建一個名爲「Main」的線程。除非您自己創建其他線程,否則您的程序將在此線程上運行。

「主」線程所做的第一件事就是查找static void main(String[] argv)方法並調用它。這是您程序的入口點。

如果你想讓事情「同時」發生,你可以創建多個線程,並給每個東西執行。然後他們將繼續同時做這些事情。 JVM還爲後臺工作創建了一些內部線程,例如垃圾收集。

+2

如果「_Main_」線程做的第一件事是搜索'static void main(String args [])'那麼怎麼來**靜態塊**先運行。 –

+9

這就是類加載的工作原理。嘗試在新類上調用一個方法,它將加載該類並初始化它(包括運行靜態初始化塊)。那裏沒有什麼特別的「主要」。 – Thilo

+0

@java_begin - 如果沒有主要方法,則無法運行該程序,因此無法執行靜態程序。 –

9

首先Main Thread is a parent thread of every thread不明確。與Process不同,在Java線程中沒有父母和孩子的概念。你有ThreadGroups來分組線程,然後有子組,但它不同於Process在某種意義上說,如果父母死了,孩子仍然存在。

main線程是啓動程序的線程,或者只是運行您的public static void main(String... args)方法的線程。

相關問題