初学者,目前刚学到线程。
后台线程的特征: 当所有前台线程都运行完成后,无论后台线程是否运行完成都要结束。
但是我运行代码发现情况和我想的并不一样。代码如下
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