ホームページ >Java >&#&チュートリアル >Java スレッド終了のいくつかの方法と分析例
B: 新しいスレッドを作成しても、前のスレッドには影響しません。 C: 例外がスローされ、スレッドは終了します。 D : これは終了ではなく、プリエンプションです。プロセスはリソース割り当ての最も基本的な単位です。同じプロセスによって作成された異なるスレッドはこれらのリソースを共有します。スレッドの優先度が高い場合、他のスレッドのリソースを占有します。他のスレッドが使用可能なリソースを持たなくなり、ブロックが発生します
スレッドが終了する 3 つの理由
2. スレッドがキャッチされない例外またはエラーをスローする
#3 、スレッドの Stop メソッドを直接呼び出してスレッドを終了する (デッドロックが発生しやすいため、推奨されません) 詳細な分析スレッドを終了する 3 つの方法①フラグビットを使用してスレッドを終了②stop メソッドを使用してスレッドを強制終了③割り込みを使用して終了スレッド1. フラグ ビットを使用してスレッド一般 run() メソッドを起動します 実行後、スレッドは正常に終了しますが、一部のスレッドはサーボ スレッドであることがよくあります。これらは長時間実行する必要があるため、変数を使用してループを制御する必要があります。定義終了フラグ exit. exit が true の場合、while ループは終了し、exit のデフォルト値は false ですexit を定義するときは、Java キーワード volatile が追加されます。このキーワードの目的は、exit を同期することです。exit の値を同時に変更できるのは 1 つのスレッドだけです。public class ThreadSafe extends Thread { public volatile boolean exit = false; public void run() { while (!exit){ //do something } } }2. stop メソッドを使用します。スレッドを強制終了するには プログラム内で直接 thread.stop() を使用してスレッドを強制終了することもできますが、stop メソッドは非常に危険であり、コンピュータをシャットダウンするのではなく、突然電源を切るようなものです。通常の手順に従ってください。予測できない結果が生じる可能性があります。主に安全ではありません。: thread.stop() が呼び出された後、子スレッドを作成したスレッドは ThreadDeatherror エラーをスローし、子スレッドによって保持されているすべてのロックを解放します。 3. 割り込みを使用してスレッドを終了するスレッドが 2 つの状態にある場合、割り込みを使用して終了します(1) スレッドはブロック状態ではありません。 isInterrupted() を使用して、ループを終了するスレッドの割り込みフラグを決定します。interrupt() メソッドを使用すると、割り込みフラグは true に設定されます。これは、カスタム フラグを使用してループを終了するのと同じです。ループを制御する
public class MyThread extends Thread { @Override public void run() { try { for (int i = 0; i < 500000; i++) { if (interrupted()) { System.out.println("已经是停止状态了"); throw new InterruptedException();//中断异常 } System.out.println("i=" + (i + 1)); } System.out.println("我在for下面"); } catch (InterruptedException e) { System.out.println("进run方法中的catch了!"); e.printStackTrace(); } } }(2) スレッドがブロックされた状態です。ソケット内の sleep メソッド、同期ロックの wait、receiver、accept などのメソッドが使用されている場合、interrupt() メソッドが使用されます。スレッドの名前は
public class ThreadInterrupt extends Thread { public void run() { try { sleep(50000); // 延迟50秒 } catch (InterruptedException e) { System.out.println(e.getMessage()); } } public static void main(String[] args) throws Exception { Thread thread = new ThreadInterrupt(); thread.start(); System.out.println("在50秒之内按任意键中断线程!"); System.in.read(); thread.interrupt(); thread.join(); System.out.println("线程已经退出!"); }
以上がJava スレッド終了のいくつかの方法と分析例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。