当前位置: 代码迷 >> 综合 >> (Daemon)后台线程/守护线程理解
  详细解决方案

(Daemon)后台线程/守护线程理解

热度:37   发布时间:2023-12-14 13:28:46.0

后台线程,它是在后台运行的,它的任务是为其他线程提供服务,这种线程被称为“后台线程(Daemon Thread)”,又称为“守护线程”或“精灵线程”。JVM的垃圾回收线程就是典型的后台线程。
后台线程的特征:如果所有的前台线程都死亡了,后台线程也会自动死亡。
其余代码不变,调用Thread对象的setDaemon(true)可将制定线程设置为后台线程。所有的前台线程都死亡时,后天线程也死亡,程序就退出了。


class DaemonThread extends Thread{public DaemonThread(String name){super(name);}@Overridepublic void run(){for(int i=0;i<100;i++){try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}System.out.println(getName()+"->"+i);}}
}
public class DaemonThreadTest {public static void main(String[] args) {DaemonThread daemonThread= new DaemonThread("后台线程");daemonThread.setDaemon(true);//设置为后台线程daemonThread.start();try {Thread.sleep(5000);//睡眠5秒} catch (InterruptedException e) {e.printStackTrace();}System.out.println("执行完毕");MtThread thread = new MtThread("前台线程");thread.start();}
}class MtThread extends Thread{public MtThread(String name) {super(name);}@Overridepublic void run() {for(int i = 0 ; i < 100 ; i ++){try {sleep(500);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}System.out.println(getName() + "   " + i );}}}

从上面代码打印结果来看,当主线程睡眠5秒后,然后等前台线程的100个数打印完了,不管后台线程有没有执行完,这时候因为前台线程都执行完了,所以后台线程也会停止结束不再执行了。而如果后台线程先于前台线程执行完毕,前台线程会继续执行。