基本概念
守护线程:和主线程一起结束的线程,叫守护线程。非守护线程:主线程的结束不影响线程的执行的线程,也叫用户线程。
如何将一个线程t变成守护线程
调用t.setDaemon(true)方法将非守护线程变为守护线程。;
示例代码
非守护线程:
Thread t = new Thread(new Runnable() {
public void run() {
// TODO Auto-generated method stub
for(int i=1 ; i<=10 ; i++){
try {
Thread.sleep(500);//线程休眠500毫秒
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("子线程执行"+i+"次");
}
}
}) ;
t.start();
for(int i=1 ; i<=5 ; i++){
System.out.println("主线程执行"+i+"次");
}
}
运行结果:
主线程执行1次
主线程执行2次
主线程执行3次
主线程执行4次
主线程执行5次
子线程执行1次
子线程执行2次
子线程执行3次
子线程执行4次
子线程执行5次
子线程执行6次
子线程执行7次
子线程执行8次
子线程执行9次
子线程执行10次
由结果可以看出主线程的正常结束并不会影响子线程t的执行,子线程t继续执行。 - 守护线程
Thread t = new Thread(new Runnable() {
public void run() {
// TODO Auto-generated method stub
for(int i=1 ; i<=10 ; i++){
try {
Thread.sleep(30);//线程休眠500毫秒
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("子线程执行"+i+"次");
}
}
}) ;
t.setDaemon(true) ; //将子线程t设置为守护线程
t.start();
for(int i=1 ; i<=5 ; i++){
try {
Thread.sleep(30);//线程休眠500毫秒
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("主线程执行"+i+"次");
}
}
执行结果:
主线程执行1次
子线程执行1次
主线程执行2次
子线程执行2次
主线程执行3次
子线程执行3次
主线程执行4次
子线程执行4次
主线程执行5次
由结果可以看出主线程结束后,设置为守护线程的子线程将不再执行。