技术干货程序员

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

2017-10-23  本文已影响0人  x_coder

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

一、守护线程

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

上一篇 下一篇

猜你喜欢

热点阅读