Java前台线程与后台线程
上一篇博客在main()方法中,创建并启动了四个新的线程后,main()方法中的代码执行完毕,此时,方法会结束,main线程也就随之结束了
通过程序的运行结果可以看出,虽然,main线程结束了,但是整个Java程序却没有随之结束,仍然在执行售票的代码
对于Java程序来说,只要还有一个前台线程在运行,这个进程就不会结束,如果一个进程中,只有后台线程在运行,这个进程就会结束
前台线程与后台线程
前台线程、后台线程是一种相对的概念
新创建的线程,默认都是前台线程
如果,某个线程对象在启动之前,调用了setDaemon(true)语句,这个线程就变成了一个后台线程
示例,Example06.java
// 创建DamonThread类,实现Runnable接口
class DamonThread implements Runnable{
// 实现接口中的run()方法
public void run(){
while(true){
System.out.println(Thread.currentThread().getName()+"---is running.");
}
}
}
public class Example06{
public static void main(String[] args){
System.out.println("main线程是后台线程吗?"+Thread.currentThread().isDaemon());
// 创建一个DamonThread对象dt
// 创建线程t,共享dt资源
DamonThread dt=new DamonThread();
Thread t=new Thread(dt,"后台线程");
System.out.println("t线程默认是后台线程吗?"+t.isDaemon());
// 将线程t,设置为后台线程
// 调用start()方法,开启线程t
t.setDaemon(true);
t.start();
for(int i=0;i<10;i++){
System.out.println(i);
}
}
}
编译运行
演示了一个后台线程结束的过程
当开启线程t之后,会执行死循环中的打印语句,我们将线程t设置为后台线程后,当前台线程死亡后,JVM会通知后台线程
由于,后台线程从接受指令,到做出响应,需要一定的时间,因此,打印了几次后台线程—is running语句后,后台线程也结束了
因此,说明后台线程在运行时,进程就结束了
设置后台线程
将某个线程设置为后台线程,必须在该线程启动之前 也就是说,setDaemon()方法必须在start()方法之前调用,否则,会引发IllegalTreadStateException异常