守护线程
2016-02-01 14:55
232 查看
守护线程与用户线程的区别只在于线程结束的时机。
执行以下代码,你会发现虽然daemonThread线程内部定义了一个死循环,但整个程序任然会在userThread执行完成之后不久自动退出。
守护线程:守护线程则是用来服务用户线程的,如果没有其他用户线程在运行,那么就没有可服务对象,也就没有理由继续下去(即,当JVM中所有的线程都是守护线程的时候, JVM就可以退出了)。 垃圾回收线程也是守护线程。
执行以下代码,你会发现虽然daemonThread线程内部定义了一个死循环,但整个程序任然会在userThread执行完成之后不久自动退出。
public class Example6 { public static void main(String[] args) { final Thread userThread = new Thread(new Runnable() { @Override public void run() { for (int i = 0; i < 100; i++) { try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } } } }); userThread.start(); Thread daemonThread = new Thread(new Runnable() { @Override public void run() { while (true) { System.out.println("用户线程是否alive:"+userThread.isAlive()); } } }); daemonThread.setDaemon(true);//设置为守护线程 daemonThread.start(); } }
守护线程:守护线程则是用来服务用户线程的,如果没有其他用户线程在运行,那么就没有可服务对象,也就没有理由继续下去(即,当JVM中所有的线程都是守护线程的时候, JVM就可以退出了)。 垃圾回收线程也是守护线程。
public class Example6 { public static void main(String[] args) { Thread daemonThread = new Thread(new Runnable() { @Override public void run() { while (true) {} } }); daemonThread.setDaemon(true);//设置为守护线程 daemonThread.start(); for (int i = 0; i < 100; i++) { try { Thread.sleep(200); System.out.println(daemonThread.isAlive()); } catch (InterruptedException e) { e.printStackTrace(); } } } }
相关文章推荐
- 快速检测Linux服务器性能
- 新年新感悟
- leetcode刷题系列C++-Search in Rotated Sorted Array II
- Android中黄色警告提示强迫症
- kNN算法概要
- WEB容器启动——web.xml加载详解
- 多线程 (三)iOS中的锁
- 7.7 Models -- Working with Records
- 企业号、 公众号 、服务号 、订阅号区别(微信入门基础知识)
- Writing Files
- filco minila air在debian下的蓝牙适配安装
- Android仿QQ未读消息拖拽删除粘性效果
- javascript_词法结构
- 浅谈C#中简单的异常引发与处理操作
- 栈 1
- 源码推荐(02.01B):方便易用照片多选框架,一句代码拨通任何电话号码
- 使用Kettle从FTP拉取文件
- BZOJ 1812: [Ioi2005]riv( 树形dp )
- scalac 学习
- TCPDump 抓Loopback数据包