JAVA之线程3--Daemon线程

Daemon线程,即后台线程或守护线程,是指在程序运行的时候在后台提供一种通用服务的线程,并且这种线程并不属于程序中不可或缺的部分。因此,当所有的非后台线程结束时,程序也就终止了,同时会杀死进程中的所有后台线程。反过来说,只要任何非后台线程还在运行,程序就不会终止。--《Java编程思想》比如垃圾回收线程就是一个很称职的daemon线程。

Daemon线程的创建方式和普通线程差不多,只需通过setDaemon(true)将线程设置为daemon线程

下面是一个简单的例子程序:

public class Daemon implements Runnable{
	public static int count = 0;
	public final int id = count++;
	public static void main(String[] args) {
		for(int i=0 ; i<10 ; i++) {
			Thread daemon = new Thread(new Daemon());
			daemon.setDaemon(true);  //将线程设为Daemon线程
			daemon.start();
		}
		try {
			System.out.println("all deamon started!");
			Thread.sleep(100);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	@Override
	public void run() {
		// TODO Auto-generated method stub
		try {
			while(true) {
				Thread.sleep(100);
				System.out.println("Daemon Thread "+id + " is running...");
			}
		} catch (InterruptedException e) {
			// TODO: handle exception
		}
	}
	
}

运行结果:

all deamon started!
Daemon Thread 8 is running...
Daemon Thread 4 is running...
Daemon Thread 0 is running...
Daemon Thread 2 is running...
Daemon Thread 1 is running...
Daemon Thread 3 is running...
Daemon Thread 5 is running...
Daemon Thread 6 is running...
Daemon Thread 7 is running...

例子程序分析:

由于主线程执行完输出语句后睡眠了100ms,并没有结束线程,所以所有daemon线程都能创建并完成输出。假设我们把主线程的休眠时间改为99ms,观察输出情况。

all deamon started!
Daemon Thread 3 is running...
Daemon Thread 1 is running...
Daemon Thread 0 is running...
Daemon Thread 2 is running...

此时可以发现,因为主线程提前结束了,所以有一部分daemon线程没有来得及执行完所有操作就终止了。

通过上述例子,使用daemon线程需要注意以下几点:

①setDaemon(true)需要在start()之前,否则会报“IllegalThreadStateException”异常

②因为daemon线程随时可能被杀死,所以不要试图用它来访问固有资源(数据库等)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值