java守护线程与用户线程的区别
来源:互联网 发布:kontakt mac 音源 编辑:程序博客网 时间:2024/05/01 10:28
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
阅读全文
1 0
- java守护线程与用户线程区别
- JAVA守护线程与用户线程的区别
- java 中守护线程与用户线程的区别
- java守护线程与用户线程的区别
- JAVA用户线程&守护线程的区别
- java守护线程和用户线程的区别
- java 用户线程与守护线程
- Java之守护线程与用户线程
- java的守护线程与非守护线程(用户线程)
- 用户线程与守护线程
- java的守护线程与非守护线程
- java的守护线程与非守护线程
- java的守护线程与非守护线程
- java的守护线程与非守护线程
- Java的守护线程与非守护线程
- java的守护线程与非守护线程(转)
- java的守护线程与非守护线程
- java的守护线程与非守护线程
- jquery基础
- 我的高大上技术(study)
- FAFU OJ 博弈(5)Fibonacci
- Python检测文本字符编码的方法
- Spring 通过FactoryBean来配置bean
- java守护线程与用户线程的区别
- jsp页面加载时自动执行action
- Zookeeper实例Curator API-分布式锁
- 《Redis开发与运维》笔记
- packet_forwarder Use with Raspberry Pi
- 使用XSSF 创建高版本的excel
- 图形的几何变换
- POI 实现excel导入
- 说说$POST 、$HTTP_RAW_POST_DATA、php://input三者之间的区别