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线程的理解相关推荐

  1. java 后台线程作用_Java 后台线程介绍

    packagecom.aaa.threaddemo;/** 一 Java后台线程? * 守护线程--也称"服务线程",他是后台线程, * 它有一个特性,即为用户线程 提供 公共服务 ...

  2. java 线程组作用_Java线程组(ThreadGroup)使用

    JDK 对线程组类注释: A thread group represents a set of threads. In addition, a thread group can also includ ...

  3. JAVA线程六种状态_Java:线程的六种状态及转化

    多线程概述及创建方式 Java:线程的六种状态及转化 关于线程的生命周期,网上书上说法不一,难以统一,本篇做一个总结: java.lang.Thread.State枚举类中定义了六种线程的状态,可以调 ...

  4. java线程饥饿死锁_java并发-线程饥饿死锁测试

    线程饥饿死锁 <Java并发编程实践>中对线程饥饿死锁的解释是这样的:在使用线程池执行任务时,如果任务依赖于其他任务,那么就可能产生死锁问题.在单线程的Executor中,若果一个任务将另 ...

  5. java线程中等待_Java:线程中的Thread.sleep():没有等待

    线程没有睡觉我有问题. 我不能把我的整个代码放在这里.所以,为了重现,这里是一个等待5秒的基本代码. try { int millisec = 5000; System.out.println(new ...

  6. java线程通信概念_java基础线程总结(线程概念、线程创建方式、线程间通信、线程重要方法)...

    基础篇之<线程> @author :kern ---------------------------------------------------------------- 一:进程:是 ...

  7. java 编写线程公共类_Java实现线程间通信方式

    线程间通信的模型: 共享内存 消息传递 我们来做道题理解一下 题目: 有两个线程A.B,A线程向一个集合里面依次添加元素"abc"字符串,一共添加十次,当添加到第五次的时候,希望B ...

  8. java中的僵死进程_Java中线程间怎么通讯?什么叫僵死线程?

    <尸家保镖> <猛鬼出千> <不死心灵> <大家发财> <灵幻少女> <九天玄女> <僵尸至尊> <湘西尸王& ...

  9. java线程池面试题_java之线程池面试题

    面试官:线程池有哪些?分别的作用是什么? 常用的线程池有: newSingleThreadExecutor newFixedThreadExecutor newCacheThreadExecutor ...

最新文章

  1. PHP函数--var_dump
  2. 模拟电路技术之基础知识(四)
  3. 【前端开发系列】—— CSS3属性选择器总结
  4. 基于消息队列的分布式事务解决方案
  5. AppleScript 以管理员身份运行程序
  6. 数据库-优化-索引-索引的优化注意事项
  7. Request method 'GET' not supported解决方式
  8. 第七次scrum meeting记录
  9. WordPress程序伪静态规则(Nginx/Apache)及二级目录规则
  10. Apple计划开发完全定制的GPU架构
  11. 看我如何发现开源 WAF引擎ModSecurity 中的DoS 漏洞
  12. Linux命令解释之yum
  13. Why is it called “armature” instead of “skeleton”? or perhaps “rig”?
  14. 下载 LINUX 和 windows 版本下 MySQL5.7.32
  15. 【物理应用】基于matlab Q学习无线体域网路由方法【含Matlab源码 264期】
  16. matlab分析地形,matlab绘制地形图
  17. 杜佑夸高颎,NB人夸NB人
  18. [XJTUSE 算法设计与分析] 第三章 动态规划 3.2 动态规划典型例题与解题思路(一)
  19. 微信小程序、苹果手机(ios)时间格式显示NAN.....(已解决)
  20. android zooming bitmap

热门文章

  1. python 教材为什么喜欢用spam举例_斯坦福大学教授列举出的python入门最容易犯的错误,你中招了吗?...
  2. 关于健康吗、核算检测等系统高并发问题的一些思考
  3. mosquitto源码分析(六)
  4. UE3 GPU性能和分析
  5. UE3 Light Functions (光照函数)
  6. Adaline神经网络简单介绍和MATLAB简单实现
  7. 集成Tomcat环境到Eclipse中
  8. 华东云友会主播栏目01期 阿里云X海底捞,千人千锅就是如此任性!
  9. Python3 离线安装第三方包
  10. win7系统office向程序发送命令时出现错误