为什么前台进程结束之后,后台进程还会执行一部分。

初学者,目前刚学到线程。

       后台线程的特征: 当所有前台线程都运行完成后,无论后台线程是否运行完成都要结束。

       但是我运行代码发现情况和我想的并不一样。代码如下

public class 后台线程 {
   public static void main(String[] args) {
	   houtaiThread a = new houtaiThread();
	   qiantaiThread b = new qiantaiThread();
	   a.setDaemon(true);
	   a.setName("后台线程####");
	   b.setName("前台进程<<>>");
	   a.start();
	   b.start();
	   
	   
}
}
class houtaiThread extends Thread{
	 @Override
	public void run() {
		 for(int i=0;i<100;i++){
				System.out.println(this.getName()+i);
			}
	}
} 

class qiantaiThread extends Thread{
	 @Override
	public void run() {
		 for(int i=0;i<20;i++){
				System.out.println(this.getName()+i);
			}
	}
} 

 

执行结果:
后台线程####0
前台进程<<>>0
后台线程####1
后台线程####2
后台线程####3
后台线程####4
前台进程<<>>1
后台线程####5
前台进程<<>>2
后台线程####6
后台线程####7
前台进程<<>>3
前台进程<<>>4
前台进程<<>>5
前台进程<<>>6
前台进程<<>>7
前台进程<<>>8
前台进程<<>>9
后台线程####8
前台进程<<>>10
后台线程####9
前台进程<<>>11
后台线程####10
前台进程<<>>12
后台线程####11
前台进程<<>>13
前台进程<<>>14
前台进程<<>>15
前台进程<<>>16
前台进程<<>>17
后台线程####12
后台线程####13
后台线程####14
后台线程####15
后台线程####16
后台线程####17
后台线程####18
后台线程####19
后台线程####20
后台线程####21
后台线程####22
后台线程####23
后台线程####24
后台线程####25
后台线程####26
前台进程<<>>18
前台进程<<>>19
后台线程####27
后台线程####28
后台线程####29
后台线程####30
后台线程####31
后台线程####32
后台线程####33
后台线程####34
后台线程####35
后台线程####36
后台线程####37
后台线程####38

  按理说,前天进程结束之后,后台进程也会马上结束。   实际上则不然,后台进程是在前台进程结束以后的一段时间内自动关闭。然不是马上关闭。

    为了佐证,添加了sleep()方法。 用sleep()方法来度过上述的一段时间。

 

  //main方法没有改变,所以这里就不写了。
class houtaiThread extends Thread{
	 @Override
	public void run() {
		 for(int i=0;i<100;i++){
				System.out.println(this.getName()+i);
				try {
					sleep(300);
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
	}
} 

class qiantaiThread extends Thread{
	 @Override
	public void run() {
		 for(int i=0;i<20;i++){
				System.out.println(this.getName()+i);
				try {
					sleep(300);
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
	}
} 

  由于添加了睡眠时间,在前台进程结束之后,需要300ms。而这是上述的一段时间会在300ms内就结束了后台进程。

所以就不会看到后面进程的执行结果了。

 // 执行结果如下!
后台线程####0
前台进程<<>>0
后台线程####1
前台进程<<>>1
前台进程<<>>2
后台线程####2
后台线程####3
前台进程<<>>3
前台进程<<>>4
后台线程####4
前台进程<<>>5
后台线程####5
后台线程####6
前台进程<<>>6
后台线程####7
前台进程<<>>7
前台进程<<>>8
后台线程####8
前台进程<<>>9
后台线程####9
前台进程<<>>10
后台线程####10
前台进程<<>>11
后台线程####11
前台进程<<>>12
后台线程####12
后台线程####13
前台进程<<>>13
前台进程<<>>14
后台线程####14
前台进程<<>>15
后台线程####15
后台线程####16
前台进程<<>>16
后台线程####17
前台进程<<>>17
后台线程####18
前台进程<<>>18
前台进程<<>>19
后台线程####19

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值