Java守护线程(后台线程)
java的垃圾回收线程就是一个守护线程。
当线程结束的时候守护现场也就自然会结束了,守护线程和普通线程的写法是一样的,只是在start()之前要先使用public final void setDaemon(boolean vale)设置为true。可以使用thread.isDaemon()判断特定的线程thread是否为守护线程:
public class ThreadDaemonDemo {
public static void main(String[] args) {
ThreadA threadA=new ThreadA();
ThreadB threadB=new ThreadB();
Thread threadMain=Thread.currentThread();
threadA.setDaemon(true);
threadB.start();
threadA.start();
System.out.println("线程A是否为守护线程:"+threadA.isDaemon());
System.out.println("线程B是否为守护线程:"+threadB.isDaemon());
System.out.println("线程Main是否为守护线程:"+threadMain.isDaemon());
}
}
class ThreadA extends Thread{
@Override
public void run() {
super.run();
for (int i = 0; i <100 ; i++) {
System.out.println("线程A执行....................."+i);
try {
Thread.sleep(7);
}
catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
class ThreadB extends Thread{
@Override
public void run() {
super.run();
for (int i = 0; i < 5; i++) {
System.out.println("线程B执行....................."+i);
try{
Thread.sleep(7);
}
catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
可以看到,线程A为后台线程,线程B和主线程非后台线程。
我们设置了线程B循环5次,而线程A循环100次,由此也可以看出,后台线程会在前台线程结束时自动结束,(当正在运行的线程都为守护线程时,JVM会自动退出)。
注意:
|–setDaemon(boolean vale)一定要在start()之前,否则会抛出异常。eg:
|–不是所有任务都能交给后台线程。
|–Daemon中产生的线程也是Daemon的。