子スレッドが実行を完了する前にメインスレッドが終了しますか?親スレッドが終了した場合子スレッドが実行を完了する前にメインスレッドが終了しますか?
私は2件の記事上記の記事で
http://www.cs.mtu.edu/~shene/NSF-3/e-Book/FUNDAMENTALS/thread-management.html
に読み、「スレッドの終了」パラでは、それはその子スレッドのすべてが同様に終了し、「レッドに述べています。 "上記の記事で
http://www.roseindia.net/java/thread/overview-of-thread.shtml
、そのページの状態で最後の行「main()メソッドの実行が終了することができますが、すべてのスレッドがその実行を完了持つまでプログラムが実行し続けます。」。
私は料金が矛盾しています。私が間違っているなら、専門家は私を訂正してください。
私のプログラムでは、Mainメソッドを持つプログラムが2スレッドのコンストラクタを呼び出します。それぞれのスレッドのコンストラクタで、私はstart()メソッドを持っています。
TestA A = new TestA("TestA");
TestB B = new TestB("TestB");
public TestA(String name) {
System.out.println(name);
t = new Thread(this);
t.start();
}
子スレッドが実行を完了する前にメインスレッドは何が起こるか知りたいですか?もしそうなら、子スレッドはとにかくスレッドを実行し続けますか?
私はプログラムを実行しようとしましたが、メインスレッドが終了してもすべての子スレッドが実行されることがあります。 2つのスレッドで、私はいくつかのファイルを処理しています。 testAスレッドA単独では、1つのファイルだけが何度か処理されません。しかし何度も、すべてのファイルが処理されており、私は何の問題もありません。
詳細な説明をありがとうございます。 「あなたの場合、スレッドはユーザースレッドであり、したがってメインスレッドが終了する前に完了することが許可されています」と言いました。ここでは、メインメソッド()のプログラムではなく、Java実行時間になる「メインスレッド」を意味します。正しい? – user1257836
mainメソッドを持つクラスとmainメソッドの内部で作成されるスレッドはすべてUserスレッドです。これらのスレッドはすべて独立して同時に実行されます。私はSystem.out.println(「メインメソッドの終了」)を与えたので、メインメソッドの最後に。これは子スレッドのsystem.out.println()の前に出力されます。これは、メインスレッド(メインメソッドを持つクラス)が子スレッドの前であっても終了できると思うようになりました。これはきちんとした正しい行動方法ですか? – user1257836
ファイルロックの意味を明確にしてください。前もって感謝します!! – user1257836