linux c 守护线程,关于守护线程

守护线程Demo

在Java中有两种线程:一种是普通线程,另一种是守护线程

守护线程:顾名思义就是守护的线程,它是为非守护线程服务的线程。

JVM虚拟机正常退出的时机就是系统中不存在非守护线程的时候,也就是说系统中不存在普通线程时虚拟机退出而不管守护线程是否还在运行

生活场景举例:普通线程相当于是主人,守护线程就是保姆,保姆是为了主人服务的。当主人都挂了,那么保姆可以存在也可以不存在

来一道面试题:一个主线程,三个子线程,9个守护线程,他们停止的顺序时什么?

答:我们理解了上面讲的虚拟机退出时机再结合生活场景的例子,很容易就能搞明白这个问题!主线程相当于家庭、子线程相当于主人、守护线程相当于保姆或者是奴才,那么当我们的主人挂了,保姆可能还要继续打扫房子,但是房子也坏了消失了,那么保姆或奴才也就没必要存在了。所以说守护线程是最后才会停止的。那么主线程和子线程是谁先停止呢?这个其实很简单,我们想想,在一个main方法中启动一个线程打印一条语句,那么只有当这个线程停止之后,控制台的那个红色框才会置灰,也就是说main线程才会死亡。那么这个问题的答案就是:子、主、守护

手动敲个主线程和守护线程代码:

public class DaemonThreadDemo {

public static void main(String[] args) throws InterruptedException {

Thread mainThread = new Thread(new Runnable() {

@Override

public void run() {

Thread childThread = new Thread(new ClildThread());

childThread.setDaemon(true);

childThread.start();

System.out.println("I’m main thread…");

}

});

mainThread.start();

Thread.sleep(1000);

System.out.println(Thread.currentThread().getName() + "主线程结束");

}

}

class ClildThread implements Runnable {

@Override

public void run() {

while (true) {

System.out.println("I’m child thread..");

try {

TimeUnit.MILLISECONDS.sleep(100);

//Thread.sleep(100);

} catch (InterruptedException e) {

e.printStackTrace();

}

}

}

}

技术讨论 & 疑问建议 & 个人博客

版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 许可协议,转载请注明出处!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值