2

典型的なJavaアプリはいつ終了しますか?

mainメソッドで新しいスレッドを開始し、mainメソッドが終了しても、他のスレッドが引き続き動作している場合、アプリはすべてのスレッドが終了するまでオンのままですよね?

ありがとう&メリークリスマス!

4

2 に答える 2

6

はい、デーモン スレッドでない限り。スレッド APIからの引用:

Java 仮想マシンが起動すると、通常、単一の非デーモン スレッドが存在します (通常、このスレッドは、指定されたクラスの main という名前のメソッドを呼び出します)。Java 仮想マシンは、次のいずれかが発生するまでスレッドを実行し続けます。

  • クラス Runtime の exit メソッドが呼び出され、セキュリティ マネージャが終了操作の実行を許可しました。
  • run メソッドへの呼び出しから戻るか、run メソッドを超えて伝播する例外をスローすることにより、デーモン スレッドではないすべてのスレッドが終了しました。
于 2010-12-27T16:35:58.723 に答える
1

main() 関数は、メイン ユーザー スレッドを定義します。作成した他のユーザー スレッドもある場合があります。これらのスレッドの一部で setDeamon() を呼び出した可能性もあります。

JVM は次の場合に終了します。

  1. メイン ルーチンが終了し、他の非デーモン スレッドがない
  2. メインスレッドにキャッチされていない例外があり、他の非デーモンスレッドがない
  3. System.exit() または Runtime.halt() が呼び出される
  4. 内部 JVM エラー (まれ)
  5. OS からの -9 シグナルを殺す
  6. 電源障害または同様の回復不可能なハードウェア障害
于 2010-12-27T16:54:00.353 に答える