java后台线程学习笔记

所谓后台(daemon)线程,是指程序运行的时候在后台提供一种通用服务的线程,并且这种线程并不属于程序中不可或缺的部分。因此,当所有的非后台线程结束时,程序也就终止了,同时会杀死进程中的所有非后台线程。比如,执行main()的就是一个非后台线程。

可以通过setDaemon()方法在线程启动之前将线程设置为后台线程。

通过编写定制的ThreadFactory可以定制由Excecutor创建的线程的属性(后台、优先级、名称)。

class DaemonThreadFactory implements ThreadFactory{
	@Override
	public Thread newThread(Runnable r) {
		// TODO Auto-generated method stub
		Thread t=new Thread(r);
		t.setDaemon(true);
		return t;
	}
	
}
public class DaemonFromFactory implements Runnable{
    
	public static void main(String[] args) throws InterruptedException {
		// TODO Auto-generated method stub
        ExecutorService exec=Executors.newCachedThreadPool(new DaemonThreadFactory());
        for(int i=0;i<10;i++) {
        	exec.execute(new DaemonFromFactory());
        }
        System.out.println("All daemons started");
        TimeUnit.MILLISECONDS.sleep(500);
	}

	@Override
	public void run() {
		// TODO Auto-generated method stub
	    while(true) {	
	    	try{
	    		TimeUnit.MILLISECONDS.sleep(100);
	    		System.out.println(Thread.currentThread()+" "+this);
	    	}catch(InterruptedException e) {
	    		System.out.println("Interrupted");
	    	}
	    }
	}

}

其中让执行main()的非后台线程睡眠,使得可以在窗口上看到后台线程启动的效果,若不让执行main()的非后台线程睡眠,那么就只会看到后台线程创建完成的效果。将其中执行main()的非后台线程的睡眠时间调制更长时间,将会看到更长的后台线程运行轨迹,若将其睡眠时间调整至足够小的时间,那么也会看不到后台线程的执行轨迹。

可以通过调用isDaemon()方法判断一个线程是否为一个后台线程。

如果是一个后台线程,那么它创建的所有线程都将被自动设置为后台线程。

后台线程与finally子句

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值