java守护线程与用户线程的区别

class Thread1 extends Thread {
    public void run(){ 
        for(int i = 1; i <= 15;i++){ 
            try{ 
                Thread.sleep(100);  
            } catch (InterruptedException ex){ 
                ex.printStackTrace(); 
            } 
            System.out.println("子线程 "+i); 
        } 
    } 
}
public class DaemonThread {
	public static void main(String[] args) {
		Thread1 t = new Thread1();
		t.setDaemon(true);//是精灵守护线程,此设置必须在start之前设置
		t.start();
		System.out.println((t.isDaemon()==true?"子线程是精灵守护线程":"子线程不是精灵守护线程"));
		try {
			Thread.sleep(1000);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		System.out.println(Thread.currentThread().getName()+"结束");
	}
}

执行上面代码,输出结果为:

子线程是精灵守护线程
子线程 1
子线程 2
子线程 3
子线程 4
子线程 5
子线程 6
子线程 7
子线程 8
子线程 9
main结束

class Thread2 extends Thread {
    public void run(){ 
        for(int i = 1; i <= 15;i++){ 
            try{ 
                Thread.sleep(100);  
            } catch (InterruptedException ex){ 
                ex.printStackTrace(); 
            } 
            System.out.println("子线程 "+i); 
        } 
    } 
}
public class DaemonThread2 {
	public static void main(String[] args) {
		Thread2 t = new Thread2();
		t.setDaemon(false);//不是精灵守护线程
		t.start();
		System.out.println((t.isDaemon()==true?"子线程是精灵守护线程":"子线程不是精灵守护线程"));
		try {
			Thread.sleep(1000);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		System.out.println(Thread.currentThread().getName()+"结束");
	}
}
执行上面代码,输出结果为:

子线程不是精灵守护线程
子线程 1
子线程 2
子线程 3
子线程 4
子线程 5
子线程 6
子线程 7
子线程 8
子线程 9
main结束
子线程 10
子线程 11
子线程 12
子线程 13
子线程 14
子线程 15

由此可见,当线程为守护线程时,主线程结束,守护线程立即结束,然而,当线程为用户线程时,主线程结束后,非守护线程还会接着执行,直到执行完毕。

设置守护线程通过thread.setDeamon(boolean)设置,但是设置必须在thread.start()之前,否则会跑出一个IllegalThreadStateException异常

使用守护线程是需要主要的地方是:JRE判断程序是否执行结束的标准是所有的用户线程行完毕了,而不管守护线程的状态,因此,在使用守护线程候一定要注意这个问题

但是daemon Thread实际应用在那里呢?举个例子,web服务器中的Servlet,容器启动时后台初始化一个服务线程,即调度线程,负责处理http请求,然后每个请求过来调度线程从线程池中取出一个工作者线程来处理该请求,从而实现并发控制的目的。


参考:http://www.cnblogs.com/super-d2/p/3348183.html



发布了60 篇原创文章 · 获赞 36 · 访问量 140万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览