java守护线程与非守护线程

  • 代码逻辑
  • 当前网上结论
    • 1、主线程结束,守护线程跟着结束
    • 2、只要存在任何一个非守护线程,守护线程就全部工作
  • 测试代码
    • 第一段代码
    • 第二段代码
  • 结论

代码逻辑

代码里面包括:主线程、用户线程、守护线程。其中主线程和用户线程都属于非守护线程。

当前网上结论

1、主线程结束,守护线程跟着结束

2、只要存在任何一个非守护线程,守护线程就全部工作

测试代码

第一段代码

public class Daemon1 {public static void main(String[] args) {System.out.println("主线程开始");Thread daemon = new Thread(new Runnable() {@Overridepublic void run() {while(true){try {Thread.sleep(300);} catch (InterruptedException e) {e.printStackTrace();}System.out.println("守护线程执行中。。。。");}}});daemon.setDaemon(true);Thread thread = new Thread(new Runnable() {@Overridepublic void run() {for(int i=0;i<15;i++){try {Thread.sleep(300);} catch (InterruptedException e) {e.printStackTrace();}System.out.println("用户线程:"+i);}System.out.println("用户线程结束!!");}});daemon.start();System.out.println("守护线程状态:"+daemon.isAlive());thread.start();for(int i=0;i<10;i++){try {Thread.sleep(100);} catch (InterruptedException e) {e.printStackTrace();}System.out.println("主线程:"+i);}System.out.println("主线程结束!!");}
}

返回结果:

主线程结束,守护线程依然在执行,在用户线程执行完毕之后,守护线程才结束运行,所以网上第一种说法是错误的!

第二段代码

public class Daemon {public static void main(String[] args) {System.out.println("主线程开始");Thread daemon = new Thread(new Runnable() {@Overridepublic void run() {for(int i=0;i<10;i++){try {Thread.sleep(50);} catch (InterruptedException e) {e.printStackTrace();}System.out.println("守护线程:"+i);}System.out.println("守护线程结束!!");}});daemon.setDaemon(true);Thread thread = new Thread(new Runnable() {@Overridepublic void run() {for(int i=0;i<15;i++){try {Thread.sleep(300);} catch (InterruptedException e) {e.printStackTrace();}System.out.println("用户线程:"+i);}System.out.println("用户线程结束前守护线程状态:"+daemon.isAlive());System.out.println("用户线程结束!!");}});daemon.start();System.out.println("守护线程状态:"+daemon.isAlive());thread.start();for(int i=0;i<15;i++){try {Thread.sleep(300);} catch (InterruptedException e) {e.printStackTrace();}System.out.println("主线程:"+i);}System.out.println("主线程结束前守护线程状态:"+daemon.isAlive());System.out.println("主线程结束!!");}
}

返回结果:

主线程和用户线程都在执行,但是守护线程已经结束了,所以第二种说法也是错误的。

结论

  • 当全部“非守护线程”结束时会中断正在运行的“守护线程”;
  • “守护线程”的结束不会影响到“非守护线程”的执行。

java守护线程与非守护线程相关推荐

  1. linux非守护线程一直不释放,Linux pthread 和 java thread 的是 / 非守护线程的行为

    Linux pthread 和 java thread 的是 / 非守护线程的行为 pthread_xxx 的函数并没有直接提供设置一个 pthread 为守护线程的 API 而 pthread_at ...

  2. Java中的守护线程和非守护线程(转载)

    <什么是守护线程,什么是非守护线程> Java有两种Thread:"守护线程Daemon"(守护线程)与"用户线程User"(非守护线程). 用户线 ...

  3. 守护线程与非守护线程的区别

    守护线程与非守护线程 最近在看多线程的Timer章节,发现运用到了守护线程,感觉Java的基础知识还是需要补充. Java分为两种线程:用户线程和守护线程 所谓守护线程是指在程序运行的时候在后台提供一 ...

  4. 守护线程和非守护线程

    直觉上来讲,守护线程和main相关 Java中有两种线程,一种是用户线程,另一种是守护线程. 用户线程是指用户自定义创建的线程,主线程停止,用户线程不会停止(另一条执行路径) 守护线程当进程不存在或主 ...

  5. 多线程基础-守护线程与非守护线程

    守护线程与非守护线程 1.线程分类: 2.程序线程: 3.主线程与非守护线程 4.主线程与守护线程 5.主线程.守护线程.非守护线程 6. java虚拟机是如何退出的? 1.线程分类: 守护线程 非守 ...

  6. 守护线程是什么?守护线程和非守护线程的区别是?守护线程的作用是?

    守护线程是区别于用户线程,用户线程即我们手动创建的线程,而守护线程是程序运行的时候在后台提供一种通用服务的线程.垃圾回收线程就是典型的守护线程. 守护线程和非守护线程的区别是 public stati ...

  7. java的守护进程与非守护进程

    java的守护进程与非守护进程 最近重新研究Java基础知识,发现以前太多知识知识略略带过了,比较说Java的线程机制,在Java中有两类线程: User Thread(用户线程).Daemon Th ...

  8. SWT的UI线程和非UI线程

    为什么80%的码农都做不了架构师?>>>    要理解UI线程,先要了解一下"消息循环"这个概念.链接是百度百科上的条目,简单地说,操作系统把用户界面上的每个操作 ...

  9. Android开发之UI线程和非UI线程

    这里又是老生畅谈的话了,前边已经有多篇文章针对线程进行探究解释,Android开发过程中线程的体现更是淋漓尽致.Android开发过程中涉及到的线程从大类上分可以归为两类:UI线程和非UI线程.本篇就 ...

最新文章

  1. 用Macbook-苹果系统写代码出现显示问题Text input context does not respond to _valueForTIProperty:
  2. Java数据结构和算法的数组
  3. 国内外最好用的9大工作任务管理软件
  4. mysql5.0varchar_MySQL中varchar类型在5.0.3后的变化
  5. 二十四种设计模式:代理模式(Proxy Pattern)
  6. applicationContext.xml详解
  7. 1用switch语句从控制台输入100以内的分数判断优秀,良好,及格不及格属于哪一个区间
  8. 关于Java中子类调用父类方法
  9. ConcurrentHashMap(转)
  10. Sikuli -- 创新的图形化编程技术
  11. Bailian2796 Bailian3681 数字求和【序列处理】
  12. foremost使用简介
  13. discuz论坛网站更换域名的方法及步骤
  14. 数据库 | Mysql - [索引]
  15. win8.1怎样打开计算机名,Win8怎么打开cmd命令窗口_Win8.1打开命令提示符的方法-192路由网...
  16. Office Web apps可以利用Excel Web JavaScript编程
  17. 圣天诺HL加密锁(原HASP加密锁)快速入门
  18. WTL 9.0的变化 - atlctrls.h
  19. Java 银联支付官网demo测试及项目整合代码
  20. java_关于线程常用操作及同步锁

热门文章

  1. 深入理解CSS定位中的偏移
  2. 手机连锁店经营可视化
  3. 魔方cfop公式软件_【番外篇】CFOP玩法进阶技巧与衍生解法介绍大全!
  4. Knewton适应性学习
  5. 【美股】美股中的几种分析形态
  6. 2022-12-04 第 322 场周赛
  7. Elasticsearch多字段搜索 - multi_match查询和多数字段-----multi_match查询
  8. 10g32位oracle卸载,Windows7旗舰版32位Oracle10g的安装和卸载教程
  9. python点到线段的最小距离
  10. 【我的Android进阶之旅】解决Android Studio 编译NDK项目出错:clang++: error: no such file or directory