守护线程(DeamonThread)
-
线程分为
用户线程
和守护线程
两种 -
默认所有的线程都是用户线程
-
守护线程是为用户线程服务的
-
虚拟机必须确保用户线程执行完毕
-
虚拟机如果要停止不需要等等守护线程执行完毕
(如后台记录操作日志、监控内存使用等)
示例:
一个人一直在工作,时间会一直在过去,但工作有完成的时候,时间却不会停,但可以知道完成工作花了多少时间,从工作开始时就开始计时,到工作完成的那一刻就停止计时,时间会继续流动,但已经达到了目的,不需要再管时间了
工作就是用户线程,时间就是守护线程
package com.tsymq.thread.threadmore;
public class DeamonThread{
public static void main(String[] args) {
Thread work = new Thread(new Work(), "工作");
Thread time = new Thread(new Time(), "时间");
// 将时间线程设为守护线程
time.setDaemon(true);
// 开启线程
time.start();
work.start();
}
}
class Work implements Runnable{
@Override
public void run() {
for (int i = 0; i <= 50; i += 2) {
try {
Thread.sleep(200);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("工作完成: " + i*2 + "%");
}
}
}
class Time implements Runnable{
@Override
public void run() {
int time = 0;
while(true){
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("时间过去了: " + time);
time++;
}
}
}