在Java中线程分为两种:
- 用户线程:即正常创建的线程,如负责下载、上传等耗时任务的线程
- 守护线程:在正常创建的线程上设置setDaemon(true) 该线程就成了守护线程
守护线程的生命周期:
基于其他线程,如果在程序中所有用户线程都执行完毕了,那么守护线程就会被销毁。
守护线程的优先级:
守护线程的优先级比较低,用于为系统中的其它对象和线程提供服务。
举个雷子:
// 创建一个用户进程,进行一行打印操作
public static class UserThread extends Thread {
@Override
public void run() {
super.run();
System.out.println("我是" + (Thread.currentThread().isDaemon() ? "守护进程" : "用户进程"));
}
}
// 创建一个守护进程,进行循环打印,看打印多久
public static class DaemonThread extends Thread {
@Override
public void run() {
super.run();
while (true) {
System.out.println("我是" + (Thread.currentThread().isDaemon() ? "守护进程" : "用户进程"));
}
}
}
public static void main(String[] agrs) {
// 在main函数中启动用户线程
UserThread userThread = new UserThread();
userThread.start();
// 在main函数中启动守护线程
DaemonThread daemonThread = new DaemonThread();
// 将该线程设置成守护线程
daemonThread.setDaemon(true);
daemonThread.start();
}
既然守护线程是依赖于其他线程的,那么当UserThread线程执行完毕后,DaemonThread线程就会失去对象并被销毁,来看输出结果:
我是用户进程
我是守护进程
我是守护进程
我是守护进程
我是守护进程
Process finished with exit code 0
网友评论