マルチスレッド-デーモンスレッドと非デーモンスレッド
デーモンスレッドとは何ですか?
デーモン以外のスレッドは、プログラムのフロントエンドで実行されるスレッドであるため、理解しやすく、アクティブなトランザクションを処理するためによく使用されるスレッドとして個人的に理解しています。
デーモンスレッド:名前が示すように、トランザクションを保護するために使用されるスレッド。これは主にプログラムのバックエンドで実行されます。GCスレッドの最も代表的な例はデーモンスレッドです。
デーモンスレッドの機能
- デーモンスレッドはプログラムのバックエンドで実行され、非デーモンスレッドの終わりで終了します。つまり、プログラムにデーモンスレッドがない場合、デーモンスレッドは終了します。プログラムにガーディアンがない場合は、ガーディアンスレッドも終了することがわかります。
- デーモンスレッドは、ThreadのsetDaemonメソッドで設定できますが、startメソッドの前に設定する必要があります。
- デーモンスレッドは、ファイルやデータベースなどのシステムリソースを呼び出さないようにする必要があります。いつでも中断される可能性があるためです。
デーモンスレッドを実装し、デーモン以外のスレッドが終了したときにデーモンスレッドも中断されることを確認します。
/**
* Created by 一只会飞的猪 on 2021/3/8.
*/
// 守护线程
public class DaemonThread implements Runnable{
@Override
public void run() {
for (int i = 0; i <100000; i++) {
System.out.println(Thread.currentThread().getName()+"我是守护线程,我正在运行");
}
}
}
// 非守护线程
class OtherThread implements Runnable{
@Override
public void run() {
for (int i = 0; i <10; i++) {
System.out.println(Thread.currentThread().getName()+"我是非守护线程,我正在运行");
}
}
}
class StartMain{
public static void main(String[] args) {
// 启动非守护线程
new Thread(new OtherThread()).start();
// 设置守护线程
Thread threaddaomon = new Thread(new DaemonThread());
threaddaomon.setDaemon(true);
// 启动线程
threaddaomon.start();
}
結果:
デーモンスレッドが100,000回動作したにもかかわらず、非デーモンスレッドが終了した後、デーモンスレッドが実行を継続しなかったことがわかります。