/**
*1:进程结束:
当一个进程中的所有前台线程全部结束后,进程结束。
2:后台线程:守护线程
守护线程通常会运行做一些基础服务支撑或数据供供给使用。
3:GC运行在守护线程上的。
我们的程序启动起来是,OS会分配一个进程来运行,而我们的JVM运行起来后,会启动一个守护线程来运行GC,再启动一个线程来运行main方法。
*/
public class I_houtianxiancheng {
/**后台线程
* 1,前台线程全部结束则后台线程(守护线程)跟着死,即使后台线程是死循环也不行
* 2,所有线程都参与并发,包括前台线程,后台线程
* 3,所有前台线程结束,后台线程才结束
* @param args
*/
/**
* 该程序有三个线程:1:运行main()的线程;2:线程jack;3:线程rose。
* @param args
*/
public static void main(String[] args) {
//多线程间也一定先执行main方法?有疑问
System.out.println("我是main方法所在的前台线程,我还活着...");
/*
*前台线程
*/
final Thread fore_thread
= new Thread(){
public void run(){
for(int i=0;i<10;i++){
System.out.println(
"我是前台线程fore_thread,我还活着...");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
}
}
System.out.println("我是前台fore_thread,我死了...");
}
};
/*
* 后台线程
*/
Thread daemon_thread
= new Thread(){
public void run(){
while(true){
System.out.println(
"我是守护(后台)线程daemon_thread,我还活着,除非所有的前台线程都死了,我才会死...");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
}
}
}
};
fore_thread.start();
//设置为守护线程。调用start方法前调用
daemon_thread.setDaemon(true);
daemon_thread.start();
//while(true);//死循环,while省略的循环体一直在执行,所以main方法一直执行,说明即使fore_thread线程结束了,执行main的线程仍然没结束,所以后台线程daemon_thread也不会结束
//该程序main先执行完,main方法执行完后其所在的前台线程也执行结束了
System.out.println("我是main方法所在的前台线程,我死了...");
}
}
multithreading--守护(后台)线程的作用,及其与前台线程的关系
最新推荐文章于 2023-09-14 14:26:32 发布