守护线程注意事项

注:图片来自网络(若侵则删) 守护线程特点:一旦所有用户线程都结束,守护线程会随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结束工作。