multithreading--守护(后台)线程的作用,及其与前台线程的关系

/**
 *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方法所在的前台线程,我死了...");
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值