后台线程

         有一种线程运行在后台,主要为其他线程服务,java的垃圾回收器就是典型的后台线程。后台线程又叫做守护线程或者精灵线程。

      后台线程有一个特征就是:如果其他线程都死亡了的话,那么后台线程也会自动消亡,不管其执行的任务完成与否。

      我们可以通过setDaemon函数设置某个线程为后台线程,设置必须在start方法之前,否则会引发非法线程状态异常。

     下面模拟一个线程1,并将他设置为后台线程,输出1-1000的数,主线程输出1-100的数,我们可以看到当主线程运行完成后,线程1也会消亡,线程1往往不能运行到输出1000个数的时候。下面是代码:

    

public class TestDeamon {
	public static void main(String[] args) {
		DeamonThread dt = new DeamonThread();
		//设置为后台线程
		dt.setDaemon(true);
		dt.start();
	
		for(int i =0;i<100;i++)
		{
		   System.out.println(Thread.currentThread().getName()+" "+i);
		}
	}
}

class DeamonThread extends Thread
{
	@Override
	public void run() {
	   for(int i=0;i<1000;i++)
	   {
		   System.out.println(this.getName()+"  "+i);
	   }
	}
	
}
运行结果:

 main 0
main 1
main 2
main 3
main 4
main 5
main 6
main 7
main 8
main 9
main 10
main 11
main 12
main 13
main 14
main 15
main 16
main 17
main 18
main 19
main 20
main 21
main 22
main 23
main 24
main 25
main 26
main 27
main 28
main 29
main 30
main 31
main 32
main 33
main 34
main 35
main 36
main 37
main 38
main 39
main 40
main 41
main 42
main 43
main 44
main 45
main 46
main 47
main 48
main 49
main 50
main 51
main 52
main 53
main 54
main 55
main 56
main 57
main 58
main 59
main 60
main 61
main 62
main 63
main 64
main 65
main 66
main 67
main 68
main 69
main 70
main 71
main 72
main 73
main 74
main 75
main 76
main 77
main 78
main 79
main 80
main 81
main 82
main 83
main 84
Thread-0  0
Thread-0  1
Thread-0  2
Thread-0  3
main 85
main 86
main 87
main 88
main 89
main 90
main 91
main 92
main 93
main 94
main 95
main 96
main 97
main 98
main 99
Thread-0  4
Thread-0  5
Thread-0  6
Thread-0  7
Thread-0  8
Thread-0  9
Thread-0  10

我们可以看到线程0的任务是输出1-1000的数,但是他输出10的时候,他就消亡了,因为他是后台线程,前台线程都死亡的话,他也会自动消亡的。

   我们在主线程中创建的线程,默认不是后台线程

你可能感兴趣的:(后台线程)