一、Thread类
Thread类中有一个属性daemon,表示线程是否是守护线程,默认值是false。与守护线程对应的是用户线程;
用户线程:daemon=false,有任务就执行。
守护线程:daemon=true,如果有用户线程存活就执行任务,如果没有用户线程存活,就退出;
二、用户线程示例
public static void main(String[] args) { Thread thread = new Thread(() -> { System.out.println(Thread.currentThread().getName()); System.out.println(Thread.currentThread().isDaemon()); while (true){ } }); thread.start(); Thread main = Thread.currentThread(); System.out.println(main.getName()); System.out.println(main.isDaemon()); }
thread线程是用户线程,while是一个死循环,程序始终处于运行状态。
31行使用断点,查看thread和main线程的参数,均为用户线程
三、守护线程
public static void main(String[] args) { Thread thread = new Thread(() -> { System.out.println(Thread.currentThread().getName()); System.out.println(Thread.currentThread().isDaemon()); while (true){ } }); thread.setDaemon(true); thread.start(); Thread main = Thread.currentThread(); System.out.println(main.getName()); System.out.println(main.isDaemon()); }
thread线程是守护线程,虽然while是一个死循环,当用户线程main运行结束,thread随即终止。
32打断点,dubeg运行
线程setDaemon()设置必须在线程执行前运行,否则会报java.lang.IllegalThreadStateException异常。