java中线程分为两种类型:用户线程守护线程。通过Thread.setDaemon(false)设置为用户线程;通过Thread.setDaemon(true)设置为守护线程。默认情况下为用户线程。

用户线程和守护线程的区别:

主线程结束后用户线程还会继续运行,JVM存活;

如果没有用户线程,都是守护线程,那么JVM结束(随之而来的是所有的一切烟消云散,包括所有的守护线程)。

补充说明:

定义:守护线程--也称“服务线程”,在没有用户线程可服务时会自动离开。

优先级:守护线程的优先级比较低,用于为系统中的其它对象和线程提供服务。

设置:通过setDaemon(true)来设置线程为“守护线程”;将一个用户线程设置为守护线程的方式是在线程启动用线程对象的setDaemon方法。

example: 垃圾回收线程就是一个经典的守护线程,当我们的程序中不再有任何运行的Thread,程序就不会再产生垃圾,垃圾回收器也就无事可做,所以当垃圾回收线程是JVM上仅剩的线程时,垃圾回收线程会自动离开。它始终在低级别的状态中运行,用于实时监控和管理系统中的可回收资源。

生命周期:守护进程(Daemon)是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。也就是说守护线程不依赖于终端,但是依赖于系统,与系统“同生共死”。那Java的守护线程是什么样子的呢。当JVM中所有的线程都是守护线程的时候,JVM就可以退出了;如果还有一个或以上的非守护线程则JVM不会退出。

代码举例:

import java.io.IOException;

class TestMain4 extends Thread {

public void run() {

//永真循环线程

for(int i=0;;i++){

try {

Thread.sleep(1000);

} catch (InterruptedException ex) {     }

System.out.println(i);

}

}

public static void main(String [] args){

TestMain4 test = new TestMain4();

test.setDaemon(true);

//调试时可以设置为false,那么这个程序是个死循环,没有退出条件。设置为true,即可主线程结束,test线程也结束。

test.start();

System.out.println("isDaemon = " + test.isDaemon());

try {

System.in.read(); // 接受输入,使程序在此停顿,一旦接收到用户输入,main线程结束,守护线程自动结束

} catch (IOException ex) {}

}

}

--------------------- 本文来自 starfe-geek 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/xyls12345/article/details/26256693?utm_source=copy

浅谈Thread.setDaemon相关推荐

  1. java手动回收_浅谈java是如何做资源回收补救的

    学习java的过程,我们经常谈论一个对象的回收,尤其是资源类型,如果没有显示的关闭,对象就被回收了,说明出现了资源泄漏.java本身为了防止这种情况,做了一些担保的方式,确保可以让未关闭的资源合理回收 ...

  2. 浅谈Java多线程机制

    浅谈Java多线程机制 (-----文中重点信息将用红色字体凸显-----) 一.话题导入 在开始简述Java多线程机制之前,我不得不吐槽一下我国糟糕的IT界技术分享氛围和不给力的互联网技术解答深度. ...

  3. aes key长度_原创 | 浅谈Shiro反序列化获取Key的几种方式

    点击"关注"了解更多信息 关于Apache Shiro反序列化 在shiro≤1.2.4版本,默认使⽤了CookieRememberMeManager,由于AES使用的key泄露, ...

  4. iOS实录15:浅谈iOS Crash

    导语:在当前的iOS开发中,虽然ARC为开发者解决了手动内存管理时代 的许多麻烦,但是内存方面的问题依然是产生iOS Crash的元凶之一,本文介绍内存方面,有关僵尸对象.野指针.内存泄漏.废弃内存这 ...

  5. java对象头_浅谈java对象结构 对象头 Markword

    概述 对象实例由对象头.实例数据组成,其中对象头包括markword和类型指针,如果是数组,还包括数组长度; | 类型 | 32位JVM | 64位JVM| | ------ ---- | ----- ...

  6. 浅谈多核CPU、多线程与并行计算

    浅谈多核CPU.多线程与并行计算 xiaofei0859 2017-05-09 17:07:11  3646  收藏 展开 0.前言 笔者用过MPI和C#线程池,参加过比赛,有所感受,将近一年来,对多 ...

  7. android fps 垂直同步,浅谈Android流畅度

    原标题:浅谈Android流畅度 哈哈 讲个故事 白 1 流畅度 关于流畅度谷歌官方给出的解释为:running at a consistent 60 frames per second, witho ...

  8. 浅谈ThreadPool 线程池(引用)

    出自:http://www.cnblogs.com/xugang/archive/2010/04/20/1716042.html 浅谈ThreadPool 线程池 相关概念: 线程池可以看做容纳线程的 ...

  9. 多线程之旅之四——浅谈内存模型和用户态同步机制

     用户态下有两种同步结构的 volatile construct: 在简单数据类型上原子性的读或者写操作   interlocked construct:在简单数据类型上原子性的读和写操作 (在这里还 ...

最新文章

  1. 一个简单HTML鼠标事件问题的衍化历程
  2. KubeMeet 深圳站完整议题出炉 快来 get 云原生边缘计算硬核技术动态
  3. Ubuntu16.04+ROS+ORB-SLAM2测试(转载)
  4. Debug Pytorch: ValueError: Expected more than 1 value per channel when training, got input size tor
  5. 左击鼠标出现右击选项是怎么回事_跟着诗妍姐姐学电脑——鼠标
  6. 智慧交通day02-车流量检测实现09:SORT/deepSORT
  7. IT兄弟连 JavaWeb教程 文件下载技术
  8. 机器人电量估计方法及实践
  9. win10如何下载python3_Win10环境中如何实现python2和python3并存
  10. Vrep/CoppeliaSim:基础操作(1)
  11. Skywalking vs Pinpoint
  12. 《神奇的数学》读后感_奇妙的数学王国读后感10篇完美版
  13. Android Studio下拉菜单
  14. HDMI/DVI设备热插拨检测
  15. 卓有成效的管理者|木深读书笔记
  16. 计算机三维机械设计基础答案,计算机三维建模复习题.docx
  17. Java实验-模拟保皇游戏开始的发牌过程
  18. 新浪微博瘫痪近一小时无法登陆,现已恢复
  19. STM32定时器编码器模式实现直流有刷电机测速(HAL库)
  20. Win10多用户远程桌面同时登录

热门文章

  1. 值得 .NET 开发者了解的15个特性
  2. Python含金量较高的证书以及学习困难盘点!
  3. 《缠中说禅108课》22:将 8 亿的大米装到 5 个庄家的肚里
  4. 生成模型技术发展过程
  5. VMware如何克隆一个虚拟机
  6. 深入理解c语言的操作符 ----【汇总】
  7. 常用的maven命令如下
  8. NYOJ1238 最小换乘
  9. Js根据身份证号获取出生日期、性别和年龄
  10. The 10 Best Neighborhoods in Seattle