java中守护线程和非守护线程

  • 什么是守护线程,什么是非守护线程?
    • java有两种状态的线程
    • 守护线程与非守护线程的区别
  • 守护线程与非守护线程代码演示区别
    • 创建守护线程
    • 守护线程:主线程销毁停止,守护线程一起销毁
    • 非守护线程:如果主线程销毁,用户线程继续运行且互不影响。

什么是守护线程,什么是非守护线程?

java有两种状态的线程

1.守护线程(例如垃圾回收线程:gc线程
2.非守护线程(用户线程:用户线程即我们手动创建的线程)

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

1.守护线程
有一个特征,例如当主线程运行的时候,垃圾回收线程一起运行。
主线程销毁,会和主线程一起销毁。
2.非守护线程
如果主线程销毁,用户线程继续运行且互不影响。

守护线程与非守护线程代码演示区别

创建守护线程

public static void main(String[] args) throws InterruptedException {Thread t1 = new Thread(new Runnable() {public void run() {while (true) {try {Thread.sleep(1000);} catch (Exception e) {// TODO: handle exception}System.out.println("我是子线程(用户线程)");}}});// 标识当前方法为守护线程,一定要在启动线程前设置为守护线程t1.setDaemon(true);t1.start();

必须在t1.start()之前设置,你不能把正在运行的常规线程设置为守护线程,否则报IllegalThreadStateException异常

守护线程:主线程销毁停止,守护线程一起销毁

public static void main(String[] args) {Thread t1 = new Thread(new Runnable() {public void run() {while (true) {try {Thread.sleep(1000);} catch (Exception e) {// TODO: handle exception}System.out.println("我是子线程(用户线程)");}}});// 标识当前方法为守护线程,一定要在启动线程前设置为守护线程t1.setDaemon(true);//启动线程t1.start();//相当与主线程for (int i = 0; i < 10; i++) {try {Thread.sleep(300);} catch (Exception e) {e.printStackTrace();}System.out.println("main:i:" + i);}System.out.println("主线程执行完毕...");}

以下为运行结果:

main:i:0
main:i:1
main:i:2
我是子线程(用户线程)
main:i:3
main:i:4
main:i:5
我是子线程(用户线程)
main:i:6
main:i:7
main:i:8
我是子线程(用户线程)
main:i:9
主线程执行完毕...

主线程结束之后并没有在继续运行守护线程,守护线程也跟着结束,一起销毁停止。

非守护线程:如果主线程销毁,用户线程继续运行且互不影响。

public static void main(String[] args) {Thread t1 = new Thread(new Runnable() {public void run() {while (true) {try {Thread.sleep(1000);} catch (Exception e) {// TODO: handle exception}System.out.println("我是子线程(用户线程)");}}});//启动线程t1.start();//相当与主线程for (int i = 0; i < 10; i++) {try {Thread.sleep(300);} catch (Exception e) {e.printStackTrace();}System.out.println("main:i:" + i);}System.out.println("主线程执行完毕...");}

以下为运行结果:

main:i:0
main:i:1
main:i:2
我是子线程(用户线程)
main:i:3
main:i:4
main:i:5
我是子线程(用户线程)
main:i:6
main:i:7
main:i:8
我是子线程(用户线程)
main:i:9
主线程执行完毕...
我是子线程(用户线程)
我是子线程(用户线程)
我是子线程(用户线程)
我是子线程(用户线程)
我是子线程(用户线程)
我是子线程(用户线程)
。。。。。。。。。。。。。。。。。。。。。

当主线程销毁停止,非守护线程(用户线程)并没有结束,而是一直在执行,与主线程互不影响。

简单理解JAVA中什么是守护线程,什么是非守护线程?相关推荐

  1. 简单理解Java中的面向对象

    java基础之面向对象 面向对象是什么 打个比方,你找对象的时候,是不是应该找人类?更具体点,你是在找茫茫人海中的一个个体,每个人都是不同的.在Java中,同一个类也是有不同的对象的,但都有相同的.基 ...

  2. 简单理解java中什么叫常量

    经常看到常量这个词,但是一般并没有太在意,之前一般就认为String定义的就是常量. 实际上,JAVA常量就是在程序中固定不变的值,是不能改变的数据.例如数字1.字符"a".浮点数 ...

  3. 一文带你理解Java中Lock的实现原理

    转载自   一文带你理解Java中Lock的实现原理 当多个线程需要访问某个公共资源的时候,我们知道需要通过加锁来保证资源的访问不会出问题.java提供了两种方式来加锁,一种是关键字:synchron ...

  4. java中怎么判断一段代码时线程安全还是非线程安全_24张图带你彻底理解Java中的21种锁...

    (给ImportNew加星标,提高Java技能) 转自:悟空聊架 本篇主要内容如下: 本篇文章已收纳到我的 Java 在线文档. Github.我的 SpringCloud 实战项目持续更新中. 帮你 ...

  5. 深入理解Java中的逃逸分析

    转载自  深入理解Java中的逃逸分析 在Java的编译体系中,一个Java的源代码文件变成计算机可执行的机器指令的过程中,需要经过两段编译,第一段是把.java文件转换成.class文件.第二段编译 ...

  6. [转载] Java内存管理-你真的理解Java中的数据类型吗(十)

    参考链接: Java中的字符串类String 1 做一个积极的人 编码.改bug.提升自己 我有一个乐园,面向编程,春暖花开! 推荐阅读 第一季 0.Java的线程安全.单例模式.JVM内存结构等知识 ...

  7. java byreference_深入理解Java中的引用(一)——Reference

    深入理解Java中的引用(一)--Reference 本系列文章首先会介绍Reference类,为之后介绍的强引用.软引用.弱引用和虚引用打下基础. 最后会介绍虚引用在DirectBuffer回收中的 ...

  8. 深入理解Java中的String(原地址https://www.cnblogs.com/xiaoxi/p/6036701.html)

    深入理解Java中的String 一.String类 想要了解一个类,最好的办法就是看这个类的实现源代码,来看一下String类的源码: public final class Stringimplem ...

  9. 24张图带你彻底理解Java中的21种锁

    本篇主要内容如下: 本篇主要内容 本篇文章已收纳到我的Java在线文档. Github 我的SpringCloud实战项目持续更新中 帮你总结好的锁: 序号 锁名称 应用 1 乐观锁 CAS 2 悲观 ...

最新文章

  1. zookeeper图形工具——zkui
  2. RHCE-postfix
  3. golang查找重复行
  4. python matplotlib模块——绘制三维图形、三维数据散点图
  5. 神策数据正式成为国家级信创工委会成员单位
  6. Python+Matplotlib制作动画
  7. android lottie字体json,Android 动画深入Lottie
  8. Oracle 11g系统自动收集统计信息
  9. All Things Intelligence—Baidu World 2020
  10. mysql select大全_Mysql select 大全
  11. 河流淹没分析_【专题归纳】关于河流地貌的知识点整理!附中国十二条著名江河名称的由来...
  12. java定义数字类型的代码_数字类型内置方法(示例代码)
  13. 劳动节前得空半天-总结一下最近使用的LINUX命令
  14. NetCDF简介与格式入门
  15. 【QCM2150】WCN3680 WFA 11ac STA 5.2.1/5.2.61测试失败
  16. kd树 python实现_Python - KDTree 实现
  17. python下载vip素材_Python下载素材脚本
  18. 股票中MACD如何计算,有什么意义
  19. myEclipse8.5注册码
  20. 布里斯托大学计算机科学专业排名,2019上海软科世界一流学科排名计算机科学与工程专业排名布里斯托大学排名第101-150...

热门文章

  1. 用Simplify3D联机打印时会重启
  2. 电快速脉冲群(EFT)设计-EMC系列 硬件设计笔记4
  3. 浏览器支持什么字体?
  4. sts会自带maven吗_STS中Maven配置
  5. 【STS】解决中文乱码问题
  6. 瑞芯微RK3399Pro平台YOLOv4 pytorch模型转RKNN模型失败
  7. 傅里叶级数FS和傅里叶变换FT,CFS,DFS与CFT,DTFT与DFT,FFT
  8. beego的定时任务
  9. verycd 动态标题收藏
  10. php微博互粉网站源代码,微博粉丝平台开发全攻略_PHP教程