Java 多线程 - 守护线程
2016-06-18 09:21
471 查看
在Java中有两类线程:User Thread(用户线程)、Daemon Thread(守护线程) 。
所谓的守护线程,是指用户程序在运行的时候后台提供的一种通用服务的线程,比如用于垃圾回收的
垃圾回收线程。这类线程并不是用户线程不可或缺的部分,只是用于提供服务的”服务线程”。
每个线程都可以或不可以标记为一个守护程序。
输出 ↓
毫无疑问,死循环了。main 和 Thread-0 都不是守护线程,所以当 main 结束后,Thread-0 仍然在运行
如果在 thread.start();的上面一行加上
输出 ↓
main 不是守护线程 Thread-0是守护线程,所以当main结束后,Thread-0 也会退出
所谓的守护线程,是指用户程序在运行的时候后台提供的一种通用服务的线程,比如用于垃圾回收的
垃圾回收线程。这类线程并不是用户线程不可或缺的部分,只是用于提供服务的”服务线程”。
每个线程都可以或不可以标记为一个守护程序。
public static void main(String[] args) throws InterruptedException { Runnable runnable = new Runnable() { @Override public void run() { for (int i = 0; i != -1; i++) { try { Thread.sleep(500);} catch (InterruptedException e) {} Thread ct = Thread.currentThread(); out.println(i +"\t 当前的线程是 => "+ ct); out.println( "\t 是否是守护线程 => "+ ct.isDaemon()); } } }; Thread thread = new Thread(runnable); thread.start(); Thread.sleep(2000); out.println("前台线程结束后,守护线程会全部关闭,在打印这句话时,前台线程并未完全结束,所以所以守护线程还是会运行一段时间"); }
输出 ↓
毫无疑问,死循环了。main 和 Thread-0 都不是守护线程,所以当 main 结束后,Thread-0 仍然在运行
如果在 thread.start();的上面一行加上
// 该方法必须在启动线程前调用。当正在运行的线程都是守护线程时,Java 虚拟机退出。 thread.setDaemon(true);
输出 ↓
main 不是守护线程 Thread-0是守护线程,所以当main结束后,Thread-0 也会退出
相关文章推荐
- Java注释@interface的用法【转】
- JAVA中压缩与解压缩
- Access restriction: The type 'JPEGCodec' is not API 报错
- eclipse如何创建web项目
- Java关键字volatile修饰变量
- Java千百问_08JDK详解(007)_javac是什么
- 【SpringMVC学习01】宏观上把握SpringMVC框架
- Java千百问_02基本使用(009)_eclipse如何设置BuildPath
- Java千百问_04异常处理(008)_java中常见的错误有哪些
- Java千百问_04异常处理(007)_常见的java异常有哪些(非运行时)
- 使用Eclipse Installer安装Eclipse
- 简单的java代码在内存加载过程(详解)
- spring MVC学习笔记
- spring MVC学习笔记
- Eclipse+ADT+Android SDK 搭建安卓开发环境
- JAVA中的static关键字
- springSecurity集成cas
- 20145314郑凯杰 《Java程序设计》课程总结
- 框架 day56 BOS项目练习(activiti,历史数据操作,流程变量,任务组,监听器,网关,spring整合)
- (JAVA+TESTNG 二)Eclipse+TestNG搭建接口自动化测试框架