デッドスレッドとは何ですか?
質問者:Aizea Dirichs |最終更新日:2020年5月26日
カテゴリ:テクノロジーおよびコンピューティングプログラミング言語
死んだ。 run()メソッドの実行が完了すると、スレッドは停止していると見なされます。スレッドがrun()メソッドと死者を完了すると、それは実行のスレッドに、あるいは実行可能な状態に戻すことはできません。デッドスレッドでstart()メソッドを呼び出すと、ランタイム例外が発生します。
ここで、デッドスレッドを再開できますか?
したがって、デッドスレッドを実行可能な状態に戻す方法はありません。代わりに、新しいThreadインスタンスを作成する必要があります。スレッドを複数回開始することは決して合法ではありません。特に、実行が完了したスレッドは再起動されない場合があります。
上記のほかに、スレッドに関連付けられている状態は何ですか?スレッドは、5つの状態のいずれかになります。 Sunによると、Javaのスレッドライフサイクルには、新規、実行可能、実行不可、および終了の4つの状態しかありません。実行状態はありません。ただし、スレッドをよりよく理解するために、5つの状態で説明しています。
簡単に言えば、どのようなイベントがスレッドの死を引き起こしますか?
死。スレッドは2つの方法で死ぬ可能性があります:自然な原因によるか、または殺される(停止される)ことによるかのいずれかです。 run()メソッドが正常に終了すると、スレッドは自然に終了します。
スレッドとそのライフサイクルとは何ですか?
スレッドは、そのライフサイクルのさまざまな段階を通過します。プログラムがスレッドを開始するまで、この状態のままになります。生まれたスレッドとも呼ばれます。実行可能-新しく生まれたスレッドが開始された後、スレッドは実行可能になります。この状態のスレッドは、そのタスクを実行していると見なされます。
39関連する質問の回答が見つかりました
どうやってスレッドを止めますか?
スレッドを一時停止/停止する最新の方法は、ブールフラグとスレッドを使用することです。 Interrupt()メソッド。ブールフラグの使用:「exit」などのスレッドを停止/強制終了するために使用されるブール変数を定義できます。スレッドを停止したいときはいつでも、 'exit'変数はtrueに設定されます。
スレッド停止が非推奨になるのはなぜですか?
このメソッドはAPIレベル15で非推奨になりました。このメソッドは元々、スレッドを強制的に停止し、例外としてThreadDeathをスローするように設計されていました。それは本質的に危険でした。ターゲットスレッドが長期間(たとえば、条件変数で)待機する場合は、割り込みメソッドを使用して待機を中断する必要があります。
Javaでスレッドを終了するにはどうすればよいですか?
今日のJavaバージョンでは、ブール揮発性変数を使用してスレッドを停止できます。あなたは覚えていれば、それはすべての例外に通常または原因のいずれか、run()メソッドの出てきたときに、Javaでスレッドはrun()メソッドと停止、から実行を開始します。このプロパティを利用して、スレッドを停止できます。
Javaで別のスレッドからスレッドを呼び出すにはどうすればよいですか?
スレッドを作成する最も簡単な方法は、Runnableインターフェースを実装するクラスを作成することです。 run ()メソッドをスレッドで実行するには、MyClassのインスタンスをそのコンストラクターのThreadに渡します( Javaのコンストラクターは、オブジェクトのインスタンスが作成されたときに呼び出されるメソッドに似たコードのブロックです)。
Javaプログラムをどのように再起動しますか?
厳密に言えば、 Javaプログラムはそれ自体を再起動できません。再起動するには、実行中のJVMを強制終了してから再起動する必要がありますが、JVMが実行されなくなる(強制終了される)と、アクションを実行できなくなります。
Javaでマルチスレッドはどのように実現されますか?
Javaのマルチスレッドは、CPUを最大限に活用するために2つ以上のスレッドを同時に実行するプロセスです。マルチスレッドアプリケーションは、同時に実行される2つ以上のスレッドを実行します。したがって、 Javaでは同時実行性とも呼ばれます。各スレッドは互いに並行して実行されます。
Javaのスレッド例外とは何ですか?
Java例外スレッド。スレッドは、プログラム内で実行される実行の独立したパスです。多くのスレッドがプログラムで同時に実行されます。マルチスレッドは、プログラムで同時に実行される複数のスレッドのグループです。プログラムのスレッドはjavaからインポートされます。
Javaでスレッドを継続的に実行するにはどうすればよいですか?
複数の方法があります。
- main()スレッド内にwhileループを作成します。このループは、2秒ごとに待機し、コンソールに最新のタイムスタンプを出力します。コード:while(true){。 }
- 同じように無限ループです。コード:for(;;){。 }
- タイマークラスを使用します。完全なチュートリアル:JavaタイマーとTimerClass –リマインダー。
スレッドが作成されると、どの状態になりますか?
実行可能な状態
どちらにスレッドの本体が含まれますか?
->スレッドへのrun()メソッドはアプリケーションへのmain()メソッドに似ているため、run()メソッドにはスレッドの本体が含まれます。スレッドを開始すると、オブジェクトのrunメソッドが、個別に実行されているスレッドで呼び出されます。
スレッドで例外が発生するとどうなりますか?
簡単に言うと、キャッチされなかったスレッドは終了し、キャッチされなかった例外ハンドラーが登録されている場合は、コールバックが返されます。スレッド。 UncaughtExceptionHandlerはインターフェースであり、キャッチされなかった例外が原因でスレッドが突然終了したときに呼び出されるハンドラーのネストされたインターフェースとして定義されます。
いくつのスレッドが作成されますか?
3つの答え。 4つのCPUソケットがあり、各CPUには最大12のコアを含めることができ、各コアには2つのスレッドを含めることができます。最大スレッド数は、4 CPU x12コアxコアあたり2スレッドであるため、12 x 4 x 2は96です。したがって、最大スレッド数は96、最大コア数は48です。
Javaの別のスレッドによってスローされた例外をキャッチできますか?
Javaには、start()メソッドの周りでtry / catchを使用して、セカンダリスレッドからスローされた例外をキャッチし、マルチスレッドのままにする方法はありません。しかし、私たちがこれまで見てきたものの一部に由来している二次スレッドからスローされた例外を処理するエレガントな方法が存在しません。
新しいスレッドを作成するために使用できるのはどれですか?
スレッドを作成する方法は2つあります。 Threadクラスを拡張(サブクラス)し、Runnableインターフェースを実装します。これらの両方の方法で、public void run()メソッドを実装する必要があります(オーバーライドし、オーバーロードしないでください)。
デッドロックを回避するために何をすべきではありませんか?
12の答え
- 複数のスレッドを使用しないでください(たとえば、Swingが行うように、すべてがEDTで行われるように強制します)
- 一度に複数のロックを保持しないでください。その場合は、常に同じ順序でロックを取得してください。
- ロックを保持している間は外部コードを実行しないでください。
- 割り込み可能なロックを使用します。
次のうち、スレッドの実行を停止するのはどれですか?
次のうち、スレッドの実行を直接停止するのはどれですか?説明:オプションAは正しいです。待機()は、別のスレッドが通知()メソッド、またはこの目的のためのnotifyAll()メソッドを呼び出すまで、現在のスレッドを待機させます。
スレッドプール内のスレッドが例外をスローした場合はどうなりますか?
スレッドが例外をスローして、プールのクラスはこの例外をキャッチしていない場合の例としては、その後、スレッドは単に1で、スレッドプールのサイズを縮小、終了します。これは何回を繰り返した場合、プールは最終的に空になると何のスレッドが他の要求を実行するために利用可能でないでしょう。