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 } } }
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(); } } }
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 サイトの他の関連記事を参照してください。