Javaでは、スレッドはユーザースレッドとデーモン(サービス)スレッドの2つのタイプに分割されます。ユーザースレッドへのsetdaemon(false);デーモンスレッドへのsetdaemon(true);設定されていない場合、それはユーザースレッドです。
単一のスレッドを終了するには、thread.interrupt()メソッドを使用し、マルチスレッドを終了するには、デーモンスレッドを設定する必要があります。ユーザースレッドが存在しない場合、すべてのデーモンスレッドが終了します(デーモンスレッドはサービススレッドであり、ユーザースレッドはサービススレッド、ユーザースレッド(サービススレッド)がなくなり、サービススレッドは存在の意味なしに自動的に終了します)
例:
class StopThreadを実装してrunnable {public void run(){// constructor、wirly(true)はインスタンス化中にデフォルトで実行されます{//デーモンスレッドが自動的に終了するかどうかを検出するために永続的な真のループが使用されます(thread.currentthread()。 {stopthread st = new StopThread();スレッドT1 = newスレッド(st); //新しいスレッドスレッドT2 = newスレッド(st); t1.setdaemon(true); //デーモン(サービス)スレッドとして設定します。ユーザースレッドが完全にハングした場合、すべてのデーモンスレッドはt2.setdaemon(true); t1.start(); // threads starts t2.start(); int num = 0; while(true){if(num ++ == 10){break;} system.out.println(thread.currentlend()getName() + " +" + " + num);} system.out.println( "over");}}最後の文System.out.println( "over")が実行されると、ユーザースレッド(メインプログラム)が終了します。バックエンド永久ループに情報を連続的に出力する2つのデーモンスレッドも自動的に終了します。
別の一般的な質問が紹介されます。これは、Java Endのすべての非デーモンスレッドがすべて、すべてのデーモンスレッドが自動的に終了する場合に当てはまりますか?
参照回答:
デーモンスレッドの唯一の機能は、他のスレッドにサービスを提供することです。デーモンのスレッドのみが残っている場合、仮想マシンは終了します」(from:Java Core Technology)。現在、非防御はないので、デーモンがサービスを提供する必要はありません。
要約します
上記は、Java言語マルチスレッド終了におけるデーモンスレッドインスタンスに関するこの記事の全体的な内容です。私はそれが誰にでも役立つことを願っています。興味のある友人は、このサイトの他の関連トピックを引き続き参照できます。欠点がある場合は、それを指摘するためにメッセージを残してください。このサイトへのご支援をありがとうございました!