JAVA DAEMON线程的理解
java线程分两种:用户线程和daemon线程。daemon线程或进程就是守护线程或者进程,但是java中所说的daemon线程和linux中的daemon是有一点区别的。
linux中的daemon进程实际是指运行在后台提供某种服务的进程,例如cron服务的crond、提供http服务的httpd;而java中的daemon线程是指jvm实例中只剩下daemon的时候,jvm就会退出。
我们通过以下实验来看下daemon线程和普通用户线程的区别
- 创建一个运行死循环的daemon线程,主线程运行5s后退出,daemon线程也会退出。
public static void main(String[] args) throws InterruptedException {
Thread thread = new Thread(new MyThread());
thread.setDaemon(true); // 设置线程为daemon线程
thread.start();
Thread.sleep(5000); // 5s后主线程退出
}
static class MyThread implements Runnable {
@Override
public void run() {
while (true) { // 线程死循环
try {
// 100ms 打印一次hello
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("hello");
}
}
}
运行结果:5ms daemon线程退出。
hello
hello
hello
hello
hello
hello
hello
hello
hello
hello
hello
Process finished with exit code 0
- 注释掉daemon,使得线程成为一个普通的用户线程
public static void main(String[] args) throws InterruptedException {
Thread thread = new Thread(new MyThread());
// thread.setDaemon(true); // 普通的用户线程
thread.start();
Thread.sleep(5000); // 5s后主线程退出
}
static class MyThread implements Runnable {
@Override
public void run() {
while (true) { // 线程死循环
try {
// 100ms 打印一次hello
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("hello");
}
}
}
运行结果:线程在主线程运行完后不会退出,一直死循环
JAVA DAEMON线程的理解的更多相关文章
- 【转】关于Java的Daemon线程的理解
原文地址:http://www.cnblogs.com/ChrisWang/archive/2009/11/28/1612815.html 关于Java的Daemon线程的理解 网上对Java的Dae ...
- java线程基础知识----java daemon线程
java线程是一个运用很广泛的重点知识,我们很有必要了解java的daemon线程. 1.首先我们必须清楚的认识到java的线程分为两类: 用户线程和daemon线程 A. 用户线程: 用户线程可以简 ...
- java守护线程的理解
package daemonThread; /*setDaemon(true)方法将线程设置为守护线程,线程的Daemon默认值为false * 只要当前JVM实例中存在任何一个非守护线程没有结束,守 ...
- java concurrency: daemon线程
daemon线程的概念 在学习操作系统概念的时候,我们就曾听说过daemon的概念.daemon本身指的是在后台运行的进程或者线程,一般用来提供某些不需要与用户直接交互的服务,有点像我们见到的一些系统 ...
- 深入理解Java之线程池
原作者:海子 出处:http://www.cnblogs.com/dolphin0520/ 本文归作者海子和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则 ...
- java线程安全理解
java线程安全理解 如果你的代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码.如果每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的. ...
- 深入理解Java之线程池(爱奇艺面试)
爱奇艺的面试官问 (1) 线程池是如何关闭的 (2) 如何确定线程池的数量 一.线程池销毁,停止线程池 ThreadPoolExecutor提供了两个方法,用于线程池的关闭,分别是shutdown() ...
- [转]深入理解Java之线程池
原文链接 原文出处: 海 子 在前面的文章中,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这 ...
- Java中线程同步的理解 - 其实应该叫做Java线程排队
Java中线程同步的理解 我们可以在计算机上运行各种计算机软件程序.每一个运行的程序可能包括多个独立运行的线程(Thread). 线程(Thread)是一份独立运行的程序,有自己专用的运行栈.线程有可 ...
随机推荐
- embarrass的writeup
大家好,这次我要为大家带来都是攻防世界misc部分embarrass的writeup. 首先下载附件,是一个压缩包,解压后找到一个流量包.用wireshark打开,直接在搜索框中输入flag{ ...
- 企业数据仪表盘设计思路,如何设计自己的BI产品
现在,很多企业的高层领导喜欢建数据仪表盘或者管理驾驶舱,甚至用巨大无比的显示屏阵列来展示各种关键业务指标KPI,那成功设计一个数据仪表盘需要如何做?又需要注意什么问题呢? 数据仪表盘是数据可视化的一 ...
- 年底获奖人太多?奖状可以用Smartbi电子表格这么做!
又到一年年终时,你的年终奖到手了吗?奖金没领到,发个奖状压压惊 今天给大家分享年终奖相关的年终奖状的批量套打功能,保证你的奖状及时到手! 示例说明 现有多个人员的奖励需要通知,需要生成可翻页的奖状.并 ...
- 【C#IO 操作】字符流(StreamWriter、StreamReader)
StreamWaiter类和StreamReader类的用法 事实上, StreamReader为了性能的考虑, 在自己的内部内置并维护了一个byte buffer. 如果在声明StreamReade ...
- 从零开始,开发一个 Web Office 套件(6):光标 & Click 事件
<从零开始, 开发一个 Web Office 套件>系列博客目录 这是一个系列博客,最终目的是要做一个基于 HTML Canvas 的.类似于微软 Office 的 Web Office ...
- javascript中逻辑运算符&&和||的返回值问题
今天在做逻辑运算符的时候遇到一个小问题一直转不过弯来,var a=(undefined&&123)||(3||5)的返回值是什么? 首先是||的返回值问题: ||的返回值会返回最早遇到 ...
- mysql 语句的使用
查看数据库 show databases; use 数据库名: show tables; //显示数据库的表名describe 表名; //显示某表的字段, 建表模板 这是为了清楚直观,再mysql行 ...
- QT:QT Creator下载安装
学习自: QtCreator5.12.6安装图文教程 - 知乎 (7条消息) Qt Creator下载安装_芒种.的博客-CSDN博客 (7条消息) QT5.11下载与安装教程_杨书航的博客-CSDN ...
- omnet++:官方文档翻译总结(一)
1.什么是omnet++ 翻译总结自:What is OMNeT++? omnet++是用来进行网络仿真的C++库和框架.这里的网络包括有线.无线.on-chip.queueing网络等等.特定领域中 ...
- Python:pandas(二)——pandas函数
Python:pandas(一) 这一章翻译总结自:pandas官方文档--General functions 空值:pd.NaT.np.nan //判断是否为空 if a is np.nan: .. ...