2017-11-23 9 views
1

Linuxでは、プロセスが子プロセスをフォークして、子プロセスが実行を継続している間に終了すると、子プロセスはinitプロセスによって採用されます。実行中にスレッドを作成したスレッドが終了した場合、Javaスレッドは別のスレッドによって採用されますか?

Javaスレッドにも同様のことが起こっているのだろうか?

Javaスレッド間に親子関係はありますか?

Javaスレッドが別のスレッドを作成し、他のスレッドが実行を終了するのを待機するためにjoin()を呼び出すのではなく、ほかのスレッドが実行中に存在する場合、他のスレッドは他のスレッドによって採用されますか?

ありがとうございました。

+3

Javaには "ownership"/"parenthood"という概念はありません。あなたはスレッドへの参照を持っています(そして 'join' /' interrupt'などを呼び出すこともできます)、そうでない場合もあります。 –

答えて

2

Javaスレッド間に親子関係はありますか?

いいえ、いずれも採用していません。

2

Javaスレッド間に親子関係はありますか?

いいえ、このような関係はありません。

前述の章の説明のほとんどは、一度に1つのステートメントまたは式を実行するコードの動作、つまり単一のスレッドによってのみ実行されますが、Java仮想マシンは多数のスレッドをサポートできますすぐに実行の。 これらのスレッドは、共有主メモリに存在する値およびオブジェクトで動作するコードを独立して実行します。スレッドは、多数のハードウェアプロセッサを持つこと、単一のハードウェアプロセッサをタイムスライスすること、または多くのハードウェアプロセッサをタイムスライスすることによってサポートされる可能性があります。

スレッドはThreadクラスで表されます。ユーザーがスレッドを作成する唯一の方法は、このクラスのオブジェクトを作成することです。各スレッドはそのようなオブジェクトに関連付けられています。スレッドは、対応するThreadオブジェクトでstart()メソッドが呼び出されると開始します。

-Java SE > Java SE Specifications > Java Language Specification > Chapter 17. Threads and Locks

また、Thread class (Java Platform SE 8)のドキュメントを参照してください。ここにそのような関係は言及されていません。 Javaスレッドが別のスレッドを作成し、実行を終了するために、他のスレッドを待つjoin()を呼び出さないと、他のスレッドが実行されている間、他のスレッドがいくつかの他で採用される存在


Javaスレッド?

いいえ、作成された(2番目の)スレッドは他のスレッドによって採用されません。しかし、注意してください:

次のいずれかのを発生まで、Java仮想マシンがスレッドを実行し続けます。

  • クラスRuntimeexitメソッドが呼び出され、セキュリティマネージャが許可しています出口操作が行われます。
  • runメソッドへの呼び出しか、runメソッドを超えて伝搬する例外をスローすることによって、デーモンスレッドではないすべてのスレッドが終了しました。

- Thread class (Java Platform SE 8)

関連する問題