2013-07-16 15 views
20

私の教師は、メインスレッドはすべてのスレッドの親スレッドであると言いましたが、理由を説明することはできません。main()メソッドとJavaのメインスレッドの関係は何ですか?

私は簡単なプログラム書くとき:

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 –

+5

@EJP:「間違っている」は厳しいです。スレッドはその関係を保持しませんが、すべてのユーザースレッドがメインスレッドから(直接的または間接的に)生成されると言えるでしょう。 – Thilo

答えて

37

main()メソッドとメインスレッドとの間に関連はありますか?

JVMが起動すると、「Main」というスレッドが作成されます。自分自身で追加のスレッドを作成しない限り、プログラムはこのスレッドで実行されます。

"Main"スレッドが最初に行うことは、static void main(String[] argv)メソッドを探して呼び出すことです。それがあなたのプログラムのエントリーポイントです。

"同時に"起こりたい場合は、複数のスレッドを作成して、それぞれに実行することができます。彼らはこれらのことを同時に続けます。 JVMは、ガベージコレクションなどのバックグラウンド作業用の内部スレッドもいくつか作成します。

+2

最初の事 "_Main_" Thread doは 'static void main(String args [])'を検索することです。 –

+9

これは、クラスロードの仕組みです。新しいクラスでメソッドを呼び出すと、そのクラスをロードして初期化します(static initializerブロックの実行を含む)。そこには "main"は特別なものはありません。 – 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)メソッドを実行するスレッドです。

関連する問題