服务粉丝

我们一直在努力
当前位置:首页 > 财经 >

面试官:说说守护线程与非守护线程的区别?还有谁不会!?

日期: 来源:Java核心技术收集编辑:点击关注 

关注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异常。

另外,如果你近期准备面试跳槽,建议在Java面试库小程序在线刷题,涵盖 2000+ 道 Java 面试题,几乎覆盖了所有主流技术面试题。


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

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
主线程执行完毕...
我是子线程(用户线程)
我是子线程(用户线程)
我是子线程(用户线程)
我是子线程(用户线程)
我是子线程(用户线程)
我是子线程(用户线程)
。。。。。。。。。。。。。。。。。。。。。

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

来源:https://blog.csdn.net/yang2812098/article/details/87651721

最近好文分享

2.5W字详解线程与锁了,面试随便问!

Java Bean 转 Map 的巨坑,注意了!
你见过哪些目瞪口呆的 Java 代码?

更多请关注 • Java核心技术

一个分享Java核心技术干货的公众号

点击阅读原文获取免费资料~

相关阅读

  • 选择 .NET 的 n 个理由

  • 点击上方蓝字关注我们(本文阅读时间:20分钟)自从我们启动快速发展的 .NET 开源和跨平台项目以来,.NET 发生了很大变化。我们重新思考并完善了该平台,添加了专为性能和安全性而设
  • 两位社工的“互怼”,结果……

  • “我是95后,当社工半年”“我是70后,当社工20年”用心用情办事,全心全力服务社工忙碌的身影是村社里最靓丽的风景当新社工遇上老社工他们会上演怎样的“互怼”?新老两代社工的对
  • 湛江机场高速一期工程主线架梁完成

  • 通讯员 付森 王警可 摄 3月21日,记者从广东交通集团所属湛江机场高速获悉,湛江机场高速一期工程主线小箱梁架设工作完成,主线桥梁全面进入桥面系施工阶段,有望于今年底实
  • 男子停车2小时要缴13万元停车费?车子才3.8万元

  • 近日,浙江杭州,有网友称自己出停车场被收13万停车费,引起众多关注。“我车才买了3万8。”该网友说道。3月21日上午,记者联系上该网友祝先生,得知此事发生在3月18日。“我当时从一
  • Kotlin 协程的7个灵魂拷问

  • 本文作者作者:小鱼人爱编程链接:https://juejin.cn/post/7207078219215962170本文由作者授权发布。之前有分析过协程里的线程池的原理:Kotlin 协程之线程池探索之旅(与Java线程
  • 十大精选 | 诸位觉得下一个十年的风口在哪里

  • 目录1、关于我掉进启真湖并被浙江卫视采访这件事2、诸位觉得下一个十年的风口在哪里3、吃饭坐在两对情侣中间,只有我是快乐的4、救命,寝室的水被饮水机喝光了5、四六级将至
  • 我微信不养鱼,我锁骨养鱼|直男门诊

  • 小姐姐你已经炫酷到我五体投地。兄弟们,使劲打我一下,今天我是不是看见美人鱼了。下次拍照的任务交给我就好,拍着胸脯保证是专业的(bushi根据图片猜坐标!俗话说,到处玩耍消耗的卡

热门文章

  • “复活”半年后 京东拍拍二手杀入公益事业

  • 京东拍拍二手“复活”半年后,杀入公益事业,试图让企业捐的赠品、家庭闲置品变成实实在在的“爱心”。 把“闲置品”变爱心 6月12日,“益心一益·守护梦想每一步”2018年四

最新文章

  • ChatGPT 这次赢麻了。。。

  • 大家好,我是R哥。最近被 AI 刷屏了,前脚 GPT-4 发布,后脚百度的文心一言也跟上了,一对比,发现 ChatGPT 这次赢麻了。。ChatGPT 实在太火爆了,人类历史上第四次工业革命,这次是靠 AI
  • 干货|网络安全资料情报库

  • 这是一个网安人的聚集地~为解决大多粉丝的提问,以及资源需求,特此联合几位师傅创办了知识星球;知识星球已经运营一年多,内容大致为:(1)每日分享资料与工具,并进行了分类(2)创办了作业模
  • 渗透测试工具 -- Satania

  • 一、工具介绍这是一款半自动渗透测试的工具,当前版本多用于渗透测试的信息搜集,每周保持更新,最终的目标是类似于linpeas的全自动渗透测试信息搜集工具,并探测其存在哪些漏洞。