美文网首页技术干货程序员
JAVA多线程05-基础篇-守护线程

JAVA多线程05-基础篇-守护线程

作者: x_coder | 来源:发表于2017-10-23 23:48 被阅读0次

本节摘要:介绍守护线程,代码示例

一、守护线程

thread 类中有一个isDaemon的布尔变量,如果isDaemon=true代表该线程为守护线程,否则为用户线程

1.1 守护线程特点

  1. 当所有用户线程结束时,程序会终止,同时杀死进程中的所有守护线程
  2. 守护线程一般在后台执行任务
  3. 守护线程创建的线程被自动设置为守护线程

二、守护线程示例

2.1 示例1

public class DaemonThreadDemo implements Runnable {
    @Override
    public void run() {
        try {
            while (true) {
                  TimeUnit.MILLISECONDS.sleep(100);
                  System.out.println(Thread.currentThread().getName() + "**Daemon:" +           Thread.currentThread().isDaemon());
          }
      } catch (InterruptedException e) {
            e.printStackTrace();
  }
}

public static void main(String[] args) throws InterruptedException {
    for (int i = 0; i < 10; i++) {
            Thread t = new Thread(new DaemonThreadDemo(), "thread" + i);
            t.setDaemon(true);//daemon值要在线程启动之前设置
            t.start();
      }
      System.out.println("all daemon thread start");
      TimeUnit.MILLISECONDS.sleep(150);
    }
}

输出结果:
all daemon thread start
thread1**Daemon:true
thread0**Daemon:true
thread4**Daemon:true
thread6**Daemon:true
thread2**Daemon:true
thread3**Daemon:true
thread5**Daemon:true
thread7**Daemon:true
thread8**Daemon:true
thread9**Daemon:true
2.1.1、结果说明

创建了10个后台线程,每个后台线程都是死循环,但是主线程main在启动后休眠了150毫秒后终止,因为已经没有用户线程运行,只剩守护线程。调整主线程的休眠时间,例如修改为50毫秒,会发现只打印 all daemon thread start

2.2 示例2

public class DaemonThreadDemo2 implements Runnable {
      private int num = 0;
      public void run() {
          while (true) {
              Thread t = new Thread("thread" + num++);
              System.out.println(t.getName() + ":" + t.isDaemon());
      }
}

public static void main(String[] args) throws InterruptedException {
        Thread t = new Thread(new DaemonThreadDemo2(), "I am a daemon thread");
        t.setDaemon(true);//daemon值要在线程启动之前设置
        t.start();
        TimeUnit.MILLISECONDS.sleep(50);
      }
}

输出结果:
thread0:true
thread1:true
thread2:true
thread3:true
thread4:true
thread5:true
.......
thread1031:true
thread1032:true
thread1033:true
thread1034:true
thread1035:true
2.2.1 结果说明:

所有由守护线程t创建的线程都是守护线程

三、总结

  • 当没有非守护线程时,程序立即退出
  • 由守护线程创建的线程,默认也都是守护线程

转载请注明作者及出处,并附上链接http://www.jianshu.com/u/ada8c4ee308b

相关文章

  • JAVA多线程05-基础篇-守护线程

    本节摘要:介绍守护线程,代码示例 一、守护线程 thread 类中有一个isDaemon的布尔变量,如果isDae...

  • java多线程相关

    (一) 基础篇 01.Java多线程系列--“基础篇”01之 基本概念 02.Java多线程系列--“基础篇”02...

  • Java多线程系列目录(共43篇)-转

    最近,在研究Java多线程的内容目录,将其内容逐步整理并发布。 (一) 基础篇 Java多线程系列--“基础篇”0...

  • Java多线程目录

    Java多线程目录 Java多线程1 线程基础Java多线程2 多个线程之间共享数据Java多线程3 原子性操作类...

  • android 多线程 — 线程的面试题和答案

    这里都是我从各个地方找来的资料,鸣谢: Java多线程干货系列—(一)Java多线程基础 JAVA多线程和并发基础...

  • Android中的多线程

    1. Java多线程基础 Java多线程,线程同步,线程通讯 2. Android常用线程 HandlerThre...

  • 多线程--同步与锁

    同步与锁 上一篇中,笔者介绍了Java多线程的基础知识,主要讲解了进程/线程的区别、Java多线程的创建、Java...

  • Java基础

    Java基础 集合基础 集合框架 多线程基础 多线程框架 反射 代理 集合基础 ArrayList LinkedL...

  • Java多线程高级特性(JDK8)

    [TOC] 一、Java多线程 1.Java多线程基础知识 Java 给多线程编程提供了内置的支持。一条线程指的是...

  • java——多线程讲解三

    java多线程的补充:守护线程(后台线程)守护线程:在一个进程中如果只剩下了守护线程,那么守护线程也会死亡。任何一...

网友评论

    本文标题:JAVA多线程05-基础篇-守护线程

    本文链接:https://www.haomeiwen.com/subject/npbzuxtx.html