デーモンスレッド:すべての非デーモンスレッドにサービスを提供するスレッド。つまり、デーモンスレッドはJVM全体のすべての非デーモンスレッドのナニーです。この
コードは、
デーモンスレッドがインターフェイスjava.lang.Thread#setDaemonを呼び出して設定を実装することを示しています(ブール値オン)、パラメーターブール型、trueはデーモンスレッド、falseはデーモンスレッドではありません。
public static void main(String [] arg0){ System.out.println( "main start =====" ); スレッド1スレッド = 新しいスレッド( "守护线程" ){ @Override 公共 のボイドの実行(){ int型私= 0を。 while(i <= 4 ){ i ++ ; { Thread.sleep( 500 );を試してください。 } キャッチ(InterruptedException e){ e.printStackTrace(); } System.out.println(Thread.currentThread()。getName() + ":" + i); } スーパー.RUN()。 } }; スレッド2スレッド = 新しいスレッド( "用户线程" ){ @Override 公共 のボイドの実行(){ int型私= 0を。 while(i <= 2 ){ i ++ ; { Thread.sleep( 500 );を試してください。 } キャッチ(InterruptedExceptionある電子){ e.printStackTrace(); } System.out.println(Thread.currentThread()。getName() + ":" + i); } super .run(); } }; // setDaemon、設定されていない場合のデフォルトfalse thread1.setDaemon(true); // thread1 をデーモンスレッドとして設定します thread2.setDaemon(false); // thread2 を通常のスレッドとして設定します thread1.start(); thread2.start(); System.out.println( "main end == " ); }
実行結果
メインスタート===== メインエンド == ユーザースレッド: 1 デーモンスレッド: 1 デーモンスレッド: 2 ユーザースレッド: 2 デーモンスレッド: 3 ユーザースレッド: 3
実行結果から確認できます。
メインスレッド、メインの実行が完了した後、通常のスレッドは実行が完了するまで実行を継続できます。
ユーザースレッドの実行後、デーモンスレッドはすぐに終了します。
結論は、
デーモンスレッドはプロセス全体のあいまいな小さなものに似ています。その生と死は重要ではありません。しかし、それは実行するプロセス全体に依存しています。ある日、他のスレッドが終了し、実行する必要がなくなると、プログラムは終了し、
デーモンスレッドが無視されても、中断されます。デーモンスレッドが現在の状況を知っている場合は、それ以前に実行されます、次に、それを早期に終了します。プログラム全体を保持する必要はありません。
デーモンスレッドは、クラッシュの女神のスペアタイヤです。
注:デーモンスレッドの終了は制御できないため、IOやファイルなどの重要な動作ロジックを割り当てないでくださいそれを与える;それは信頼できないので
、デーモンスレッドの役割は何ですか?
たとえば、GCガベージコレクションスレッド:これはクラシックデーモンスレッドです。プログラムに実行中のスレッドがなくなると、プログラムはガベージを生成しなくなり、ガベージコレクターは何も実行しないため、ガベージコレクションスレッドとして使用されます。これがJVMに残っている唯一のスレッドである場合、ガベージコレクションスレッドは自動的に終了します。常に低レベルの状態で実行され、システム内のリサイクル可能なリソースをリアルタイムで監視および管理するために使用されます。
アプリケーションシナリオ:(1)他のスレッドにサービスサポートを提供するため;(2)または、いずれの場合でも、プログラムの最後で、このスレッドは通常どおりすぐに閉じる必要があり、デーモンスレッドとして使用できます。操作を実行するスレッドは適切にシャットダウンする必要があります。そうしないと、悪い結果が生じるため、このスレッドをデーモンスレッドにすることはできませんが、ユーザースレッドにすることはできます。通常、これらは重要なトランザクションです。たとえば、データベースのエントリや更新など、これらの操作を中断することはできません。
————————————————
メインスレッドが終了すると、残りのサブスレッド(デーモンスレッド)が自動的に閉じられるため、サブスレッドを閉じ続ける必要がなくなります。たとえば、Javaガベージコレクションスレッドは典型的なデーモンスレッドであり、メモリリソースまたはスレッド管理ですが、デーモン以外のスレッドも可能です。
元のリンク:https://blog.csdn.net/weixin_40087231/article/details/90031253