Javaスレッドミーティングは次の3つの方法で終了し、終了後に死の状態にあります
run()またはcall()メソッドが実行され、スレッドは正常に終了します。
2。スレッドは、猛攻撃の例外またはエラーをスローします。
3。スレッドのstop()メソッドを直接呼び出してスレッドを終了します。
注:メインスレッドが終了すると、他のスレッドはどのような方法でも影響を受けず、それで終わりません。チャイルドスレッドが起動すると、メインスレッドと同じステータスがあり、メインスレッドの端によって影響を受けません。
スレッドが死んだかどうかをテストするために、スレッドオブジェクトのisAlive()メソッドを呼び出すことができます。スレッドが準備完了、実行、ブロックの3つの状態にある場合、メソッドはtrueを返します。スレッドが新しい状態と死んだ状態にある場合、メソッドはfalseを返します。
テストは、次のように、スレッドの死亡状況の1と2で実行されます。
メインスレッドのコードは次のとおりです。
public class threadtest {public static void main(string [] args)throws arturtedexception {thread t = new swerch(new runtask()); t.start(); while(true){thread.sleep(1000); system.out.println( "メインスレッド:子スレッドステータスは" + t.isalive()); }}}テスト1:スレッドが正常に終了した後、isalive()がfalseを返します
スレッドが正常に終了するスレッド実行コードを作成します:
public class runtaskはrunnable {@override public void run(){for(int idx = 1; idx <= 10; idx ++){system.out.println( "subthread:I'm Still Alive"+idx); {thread.sleep(3000); } catch(arturnedexception e){e.printstacktrace(); }}}} 2つのスレッドの出力結果は次のとおりです。子スレッドの通常の実行が完了した後、 Thread.isAlive()を使用してfalseを返します。
メインスレッドの状態:子スレッド状態は真のメインスレッド:子スレッド状態は真のサブスレッド:私はまだ生きています8メインスレッド:子スレッド状態は真のメインスレッド:子スレッド状態は真のサブスレッドです。スレッドの状態は誤りですメインスレッド:子スレッド状態は誤ったメインスレッド:子スレッド状態は偽のメインスレッド:子スレッド状態は偽のメインスレッド:子スレッド状態は誤りです:子スレッド状態は誤りです。誤ったメインスレッド:子スレッド状態は誤ったメインスレッド:子スレッド状態は誤りですメインスレッド:子スレッド状態は誤りです。
テスト2:子スレッドが例外をスローした後、スレッドのisalive()がfalseを返します
子スレッドのコードを変更し、例外スローを追加します。
public class runtaskはrunnable {@override public void run(){for(int idx = 1; idx <= 10; idx ++){system.out.println( "subthread:I'm Still Alive"+idx); {thread.sleep(3000); } catch(arturnedexception e){e.printstacktrace(); } if(idx == 5){新しいruntimeException( "I a a a a die"); }}}}もう一度実行して、出力を観察します。
メインスレッドの状態:子スレッド状態は真のメインスレッド:子スレッド状態は真のメインスレッド:子スレッド状態は真のサブスレッド:子スレッド状態は真のサブスレッド:真のメインスレッド:子スレッド状態はサブスレッド:子スレッド状態は真のサブスレッド:子マインスレッドは真のスレッドです。私はruntask.run(runtask.java:15)でjava.lang.thread.run(thread.java:662)メインスレッドで死んでいます:子スレッド状態は誤りですメインスレッド:子スレッド状態は偽のスレッド:子スレッド状態は偽です
例外がスローされた後、チャイルドスレッドが直接終了し、フレーズ状態になることがわかります。
要約します
スレッドが正常に終了した後、またはスレッドが無作法な例外をスローすると、スレッドが死に、ISALIVE()関数はfalseを返します。さて、上記はこの記事のコンテンツ全体です。この記事の内容が、すべての人の勉強や仕事に役立つことを願っています。ご質問がある場合は、メッセージを残してコミュニケーションをとることができます。