Java スレッドには、開始、終了、およびシーケンスを含めることができますが、それはどういう意味ですか?
2 に答える
それが意味するのは、スレッドが一連のアクションを実行することだけだと思います。正直に言うと、その概念をかなりうまく表現していません。
言い換えると:
- を作成し
Thread
、理想的には を渡しますRunnable
。(代わりに拡張Thread
してそのメソッドをオーバーライドすることもできますrun
が、それは一般的に嫌われています。) - あなたはそれを呼び
start
ます - 呼び出したスレッド
start
は、そのプログラム内の次のステートメントを実行し続けます - メソッドは、それ
run
を開始したスレッドとは関係なく、別のスレッドで実行されます。ここでの動作は、「シーケンス」が意味すると私が信じているものです - 新しいスレッドは、次のいずれかの条件により最終的に終了します。
- その
run
メソッドは正常に完了します - その
run
メソッドは例外で完了します - デーモンスレッドの場合、すべての非デーモンスレッドが終了するため、JVM 終了の一部として終了する可能性があります。
- その
Java プログラムでは、スレッドを作成しますが、それらは Java だけでは実行されません。Java は、基盤となる OS の助けを借りてそれらを実行します。マイクロプロセッサの時間を割り当て、すべてのスレッドの実行を監視するために、OS にはThread Schedulerが付属しています。スレッドの実行順序を維持する責任はすべて、スレッド スケジューラが負っています。つまり、どのスレッドが他のスレッドより優先されるかは、スレッド スケジューラにあります。スケジューリングは、スケジューラーのアルゴリズムに依存します。プリエンプティブやラウンド ロビンによるタイム スライスなど、さまざまな種類のアルゴリズムが存在します。これは、特定の時間内に何度も実行される非常に複雑なアルゴリズムです。
スケジューラは、スレッドのプールを維持します。Java スレッドがメソッドの呼び出しを開始するとstart()
、待機中のスレッドのプールに参加します。
スレッド
1 の状態。新しい状態: Thread インスタンスの作成後、スレッドはこの状態にありますが、start() メソッドの呼び出し前です。この時点で、スレッドは活動していないと見なされます。
2. Runnable (Ready-to-run) 状態 : スレッドは Runnable 状態からライフを開始します。メソッドの呼び出し後、スレッドは最初に実行可能な状態に入りますstart()
が、スレッドは、実行中、待機中、スリープ状態、またはブロック状態から戻った後にも、この状態に戻ることができます。この状態では、スレッドはプロセッサのターンを待っています。
3. 実行中の状態 :スレッドが現在実行中であることを意味する実行中の状態です。Runnable 状態に入る方法はいくつかありますが、Runnable 状態に入る方法は 1 つしかありません。それは、スケジューラが Runnable プールからスレッドを選択することです。
4. デッド状態 :run()
メソッドが完了すると、スレッドはデッドと見なされます。この状態になったスレッドは、二度と実行できないことを意味します。
5. ブロック : - 別のスレッドが保持しているリソースを待機しているため、スレッドがこの状態になる可能性があります。