java多线程之守护线程

概述

java线程分为普通线程守护线程,普通线程是运行在前端的线程,守护线程运行在后台的,守护线程主要是为其他线程提高一些服务,当所有非守护线程都结束之后,守护线程也会被虚拟机自动终止.

java中可以通过Thread的setDaemon(true)方法将一个线程设置为守护线程

守护线程必须在线程启动前设置,不然会抛出一个IllegalThreadStateException异常,这一点可以看下jdk中Thread线程的源码setDaemon就明白了

    public final void setDaemon(boolean on) {
            checkAccess();
            // isAlive方法判断线程是否存活.在线程启动了还没有终止之前isAlive均返回true
            if (isAlive()) {
                throw new IllegalThreadStateException();
            }
            daemon = on;
        }

代码样例

package thread.keyword;

import java.util.Date;

/**
 * 普通线程
 * @author Administrator
 *
 */
class Consumer extends Thread{
  private int no;
  private int time;

  public Consumer(int no, int time) {
    this.no = no;
    this.time = time;
  }


  public void run(){
    System.out.println(no + "号桌的客人开始消费了");
    try {
      Thread.sleep(time);
    } catch (InterruptedException e) {
      e.printStackTrace();
    }
    System.out.println(no + "号桌的客人结束消费耗时:" + time);

  }


}

/**
 * 守护线程,线程设置为每秒报数
 * @author Administrator
 *
 */
class Waiter extends Thread{

  public void run(){
    try {
      while(true){
        System.out.println(new Date());
        Thread.sleep(1000);
      }
    } catch (InterruptedException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
  }

}


/**
 * Daemon,将一个线程设置为守护线程,当一个进程中所有非守护线程都结束时,这个进程也将结束
 * @author Administrator
 *
 */
public class DaemonDemo {

  public static void main(String[] args) {
    Consumer c1 = new Consumer(1, 1000);
    Consumer c2 = new Consumer(2, 2000);
    Consumer c3 = new Consumer(3, 3000);
    Waiter w1 = new Waiter();

    // 此处表示将w1线程设置为守护线程,w1线程将在c1、c2、c3三个线程执行完成之后结束执行,
    // setDaemon必须在线程启动之前设置
    w1.setDaemon(true);
    w1.start();
    c1.start();
    c2.start();
    c3.start();
  }

}

执行结果
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值