Java线程区别

JAVA线程分为即实线程与守护线程,守护线程是优先级低,存活与否不影响JVM的退出的线程,实现守护线程的方法是在线程start()之前setDaemon(true),否则会抛出一个IllegalThreadStateException异常。不能操作文件、数据库等资源,避免主线程关闭而未能关闭守护线程的资源,并且它会在任何时候甚至在一个操作的中间发生中断。

作者:梦里藍天
来源:CSDN
原文:线程详解

守护线程了解

  • daemon线程所产生的所有线程都是daemon的
  • 只有虚拟机中的用户线程(非Daimon线程)全部结束,Daemon线程就会立即结束,并且也不会调用finally里的语句。
  • 在主线程关闭后无需手动关闭守护线程,因为会自动关闭
  • java垃圾回收线程就是一个典型的守护线程,当我们的程序中不再有任何运行的Thread,程序就不会再产生垃圾,垃圾回收器也就无事可做,所以当垃圾回收线程是JVM上仅剩的线程时,垃圾回收线程会自动离开,用于实时监控和管理系统中的可回收资源。
  • 守护线程的优先级比较低,用于为系统中的其它对象和线程提供服务。
  • 它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。也就是说守护线程不依赖于终端,但是依赖于系统,与系统“同生共死”,依赖于jvm中的用户进程是否运行。

部分引用资料:南望孤笑

使用案例

package thread;/*** @author pengchuang* @date 2021/9/27 10:39*/
public class Daemon {static class MainThread extends Thread {@Overridepublic void run() {System.out.println("MainThread is daemon? " + this.isDaemon());System.out.println("MainThread begin!");Thread sub1 = new SubThread();// 开启守护进程的开关//sub1.setDaemon(true);sub1.start();try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();} finally {System.out.println("MainThread" + " finally");}System.out.println("MainThread end!");}}static class SubThread extends Thread {public void run() {System.out.println("SubThread is daemon? " + this.isDaemon());System.out.println("SubThread begin!");int i = 0;try {while (i < 10) {System.out.println("SubThread  " + i++);Thread.sleep(200);}} catch (InterruptedException e) {e.printStackTrace();} finally {System.out.println("SubThread finally");}System.out.println("SubThread end!");}}public static void main(String[] args) {System.out.println("Main begin");Thread mainThread = new MainThread();mainThread.start();try {mainThread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}System.out.println("Main end!");}
}

当我们开始setDaemon(false)时候,可以得到结果

Main begin
MainThread is daemon? false
MainThread begin!
SubThread is daemon? false
SubThread begin!
SubThread  0
SubThread  1
SubThread  2
SubThread  3
SubThread  4
Main end!
MainThread finally
MainThread end!
SubThread  5
SubThread  6
SubThread  7
SubThread  8
SubThread  9
SubThread finally
SubThread end!

当我们开始setDaemon(true)时候,可以得到结果

Main begin
MainThread is daemon? false
MainThread begin!
SubThread is daemon? true
SubThread begin!
SubThread  0
SubThread  1
SubThread  2
SubThread  3
SubThread  4
Main end!
MainThread finally
MainThread end!

我们可以得到对于守护进程而言,当用户进程运行完毕,也就是一般进程运行完毕时候,jvm关闭时,守护进程会立马中断关闭,同理,当jvm中所有进程都是守护进程时候,jvm就会退出

setDaemon实例详解相关推荐

  1. Java并发编程最佳实例详解系列

    Java并发编程最佳实例详解系列: Java并发编程(一)线程定义.状态和属性 Java并发编程(一)线程定义.状态和属性 线程是指程序在执行过程中,能够执行程序代码的一个执行单元.在java语言中, ...

  2. java异常例子_java 异常的实例详解

    java 异常的实例详解 1.异常的定义:程序在运行时出现不正常情况. 异常的划分: Error:严重的问题,对于error一般不编写针对性的代码对其进行处理. Exception:非严重的问题,对于 ...

  3. python 自动化办公 案例_python自动化工具之pywinauto实例详解

    python自动化工具之pywinauto实例详解 来源:中文源码网 浏览: 次 日期:2019年11月5日 [下载文档: python自动化工具之pywinauto实例详解.txt ] (友情提示: ...

  4. java写exe程序实例,java实现可安装的exe程序实例详解

    java实现可安装的exe程序实例详解 通过编写java代码,实现可安装的exe文件的一般思路: 1.在eclipse中创建java项目,然后编写java代码,将编写好的java项目导出一个.jar格 ...

  5. python多进程应用场景_python使用多进程的实例详解

    python多线程适合IO密集型场景,而在CPU密集型场景,并不能充分利用多核CPU,而协程本质基于线程,同样不能充分发挥多核的优势. 针对计算密集型场景需要使用多进程,python的multipro ...

  6. php可以打印一个页面,利用html实现分页打印功能的实例详解

    本篇介绍利用html实现分页打印功能的实例详解,有些不想打印出来的分页打印的都可以应用这类样式进行控制 在非打印时是无效的. 页面打印 /* 应用这个样式的在打印时隐藏 */ .noPrint { d ...

  7. python判断是否回文_对python判断是否回文数的实例详解

    设n是一任意自然数.若将n的各位数字反向排列所得自然数n1与n相等,则称n为一回文数.例如,若n=1234321,则称n为一回文数:但若n=1234567,则n不是回文数. 上面的解释就是说回文数和逆 ...

  8. python2.7除法_对python中的float除法和整除法的实例详解

    从python2.2开始,便有两种除法运算符:"/"."//".两者最大区别在: python2.2前的版本和python2.2以后3.0以前的版本的默认情况下 ...

  9. java测试类 main方法_Java使用agent实现main方法之前的实例详解

    Java使用agent实现main方法之前的实例详解 创建Agent项目 PreMainExecutor 类,在main方法之前执行此方法 public class PreMainExecutor { ...

最新文章

  1. 2020年信息系统项目管理师真题讲解
  2. anaconda 安装在c盘_最省心的Python版本和第三方库管理——初探Anaconda
  3. 系统表空间数据文件损坏
  4. Javascript 高级程序设计--总结【二】
  5. 浅议磁盘分区——从MBR到GPT
  6. Haswell 事务内存相关的一些资源介绍
  7. 基于Java的对称加密算法和非对称加密算法
  8. 摄像头与成像——做图像处理必须了解的数字成像系统原理
  9. Elasticsearch Join类型查询父子关系
  10. UE4相机贴图,屏幕标注
  11. mysql哨兵模式_redis 哨兵模式集群搭建
  12. Photoshop Elements 2023(PSE简化版2023) 支持win/mac版
  13. 计算机桌面属性打不开,电脑计算机属性打不开怎么办
  14. 洛谷千题详解 | P1014 [NOIP1999 普及组] Cantor 表【C++、Java语言】
  15. 单片机 STM32 HAL 温湿度 DS18B20
  16. 前端工程师的摸鱼日常(3)
  17. 小白学Pytorch 系列--Torch API(1)
  18. 横向评测常见的优秀国外5个域名注册商
  19. 记录我删库没跑路的处理方式
  20. 批量创建带密码的7z和rar压缩包工具

热门文章

  1. STC89C51 单片机60s倒计时
  2. com 关于CLSID
  3. 并发编程-synchronized
  4. mysql plugin 空_mysql 启动报错 Could not open mysql.plugin table 的修复
  5. 格式化输出的三种格式
  6. 如何在Vscode中安装Python库
  7. 一招解决MathType或者类似插件在word中不能显示的问题
  8. python:绘制叮当猫!
  9. QuotedStr函数
  10. php laravel框架失败_PHP Laravel框架问题记录