Javaスレッドは、ユーザースレッドとデーモンスレッドの2つのタイプに分けられます。
通常、ユーザースレッドを使用しますが、デーモンスレッドが使用されることはめったになく、特定のシナリオでのみ使用されます。デーモンスレッドは通常、他のスレッドにサービスを提供するために使用されます。たとえば、JVMのガベージコレクションは、他のスレッドのガベージオブジェクトを収集するデーモンスレッドです。
ガーディアンスレッドの特徴:ライフサイクルは他のスレッドに依存します。最後のユーザースレッドが終了すると、ガーディアンスレッドは強制的に終了します。以前はファンタジー小説を読むのが好きでしたが、小説の主従合意と非常に似ていますか?死ぬには
コード
System.out.println("主线程运行开始");
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
while (true) {
System.out.println("用户线程运行中");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
});
thread.start();
System.out.println("主线程运行结束");
結果
主线程运行开始
主线程运行结束
用户线程运行中
用户线程运行中
用户线程运行中
用户线程运行中
用户线程运行中
用户线程运行中
上記のコードの実行結果から、メインスレッドが終了した後、ユーザースレッドがまだ実行されていると、JVMを終了できません。
コード
System.out.println("主线程运行开始");
Thread thread=new Thread(new Runnable() {
@Override
public void run() {
while (true){
System.out.println("守护线程运行中");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
});
thread.setDaemon(true);
thread.start();
System.out.println("主线程运行结束");
結果
主线程运行开始
守护线程运行中
主线程运行结束
ただし、デーモンスレッドの場合、メインスレッドが終了すると、デーモンスレッドは強制的に終了します。これは、一部のバックグラウンドタスクの実行に非常に適しています。
実用的なアプリケーションシナリオ:18年ぶりに働いたとき、高齢者ケアプラットフォームの開発、マットレスのドッキング、高齢者の睡眠心拍数、血圧、睡眠状態が大画面に表示され、データ収集はリアルタイムで、データ収集はしばらくの間行われたことを覚えています。メインプログラムが終了した後、データ収集は無意味であるため、無限ループとsokectを使用してデーモンスレッドを取得します