所谓后台线程,是指在程序运行的时候在后台提供一种通用服务的线程,并且这种线程并不属于程序中不可或缺的部分。因此,当所有的非后台线程结束时,程序也就终止了,同时会杀死进程中的所有后台线程。比如,执行main()
的就是一个非后台线程。
必须要在线程启动之前调用setDaemon()方法,才能把它设置为后台线程。
比如:
public class ForeThread extends Thread{
private int times = 5;
public ForeThread(String name) {
super(name);
}
public ForeThread(String name,int times) {
super(name);
this.times = times;
}
public void run() {
for(int i=0;i<times;i++) {
try {
Thread.sleep(500);
}catch(InterruptedException e) {
e.printStackTrace();
}
System.out.println(getName()+"->"+i);
}
}
}
public class BackThread extends Thread{
private int times = 5;
public BackThread(String name) {
super(name);
}
public BackThread(String name,int times) {
super(name);
this.times = times;
}
public void run() {
for(int i=0;i<times;i++) {
try {
Thread.sleep(1000);
}catch(InterruptedException e) {
e.printStackTrace();
}
System.out.println(getName()+"->"+i);
}
}
}
public class TestBackThread {
public static void main(String[] args) {
BackThread back = new BackThread("后台线程",10);
back.setDaemon(true);//setDaemon()方法把线程设置为后台线程
back.start();
ForeThread fore = new ForeThread("非后台线程",10);
fore.start();
}
}
在这个程序中,只要非台线程执行完了,无论后台线程有没有执行完,程序都会终止,并杀死所有的非后台线程。