10

私はJavaの過去の試験紙をやっていますが、私を混乱させる次の質問に遭遇しました。

次のうち、正しいものはどれですか? (該当するものをすべて選択してください。)

A. アプリケーションが実行を開始すると、1 つのデーモン スレッドがあり、そのジョブは main() を実行します。

B. アプリケーションが実行を開始すると、main() を実行するジョブを持つ非デーモン スレッドが 1 つあります。

C. デーモン スレッドによって作成されたスレッドは、最初はデーモン スレッドでもあります。

D. 非デーモン スレッドによって作成されたスレッドは、最初は非デーモン スレッドでもあります。

重要な答えは B,C,D です。B,C が正しい理由を誰か教えてください。どうもありがとう。

4

3 に答える 3

4

スレッドのドキュメントから、

デーモン スレッドによって作成されたスレッドは、最初はデーモン スレッドでもあります

各スレッドは、デーモンとしてマークされている場合とマークされていない場合があります。あるスレッドで実行中のコードが新しい Thread オブジェクトを作成する場合、新しいスレッドの優先度は最初は作成中のスレッドの優先度と同じに設定され、作成中のスレッドがデーモンである場合にのみデーモン スレッドになります。

アプリケーションが実行を開始すると、main() を実行するジョブを持つ非デーモン スレッドが 1 つあります。

Java Virtual Machine starts up, there is usually a single non-daemon thread(通常calls the method named mainは指定されたクラス) の場合。Java 仮想マシンは、次のいずれかが発生するまでスレッドを実行し続けます。

  • クラス Runtime の exit メソッドが呼び出され、セキュリティ マネージャが終了操作の実行を許可しました。

  • run メソッドへの呼び出しから戻るか、run メソッドを超えて伝播する例外をスローすることにより、デーモン スレッドではないすべてのスレッドが終了しました。

デーモン スレッドと非デーモン スレッド

「デーモン」スレッドは、プログラムが実行されている限りバックグラウンドで一般的なサービスを提供することになっているスレッドですが、プログラムの本質の一部ではありません。したがって、すべての非デーモン スレッドが完了すると、プログラムは終了します。逆に、実行中の非デーモン スレッドがある場合、プログラムは終了しません。

詳細については、ThinkingInJavaを参照してください。

于 2013-10-22T12:08:50.480 に答える