zl程序教程

您现在的位置是:首页 >  后端

当前栏目

Java多线程-守护线程

2023-06-13 09:14:21 时间

守护线程注意事项

注:图片来自网络(若侵则删)

守护线程特点:一旦所有用户线程都结束,守护线程会随JVM一起结束。

用代码来证明第三条所说,不是所有的任务都可以分配给守护线程来执行。

场景描述

把一个正在向文件中执行写入操作的线程设置为守护线程,在写入过程中结束用户主线程,那么该守护线程也会随之结束。

示例代码

/**
 * @Author: www.itze.cn
 * @Email: 814565718@qq.com
 */
class MyThread3 implements Runnable {
    @Override
    public void run() {
        int count = 0;
        File file = new File("D:" + File.separator + "word.txt");
        while (count < 99) {
            try {
                OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream(file, true));
                writer.write("word: " + count+"\r\n");
                System.out.println("写入word: " + count);
                writer.close();
                Thread.sleep(2000);
            } catch (Exception e) {
                e.printStackTrace();
            }
            count++;
        }
    }
}

public class ThreadAndRunnable {
    public static void main(String[] args) {
        System.out.println("进入主线程:" + Thread.currentThread().getName());
        Thread thread = new Thread(new MyThread3());
        //设置守护线程
        thread.setDaemon(true);
        //启动线程
        thread.start();
        //在控制台输入任意退出主线程
        new Scanner(System.in).next();
        System.out.println("结束主线程:" + Thread.currentThread().getName());
    }
}

控制台输入执行结果

当在控制台输入aaa时结束了主线程

文件写入结果

文件写入到word:3时结束了,证明了当用户线程都结束之后,守护线程也会随JVM结束工作。