(54)守护线程 setDaemon方法

人所看到的都是前台线程,当通过Thread类的setDaemon方法将某个线程标记为后台线程后,它就具备了特殊的含义。后台线程的特点是当前台开启后,共同抢夺cpu执行权,当所有前台线程结束后,后台线程会自动结束,后台依赖于前台:前台在,后台就在,前台结束,后台结束。

public class StopThread implements Runnable {
    private boolean flag=true;
    public synchronized void run() {
        while(flag) {

            System.out.println(Thread.currentThread().getName()+"-----run");
        }
    }
    public void changeFlag() {
        flag=false;
    }

}
public class StopThradDemo {

public static void main(String[] args) {
    StopThread s=new StopThread();
    Thread t1=new Thread(s);
    Thread t2=new Thread(s);
    t1.steDaemon(true);
    t2.steDaemon(true);
    t1.start();
    t2.start();
    int num=0;
    while(true) {
        if(num++ ==10)
        {
            break;
        }
        System.out.println(Thread.currentThread().getName()+"-----"+num);
    }
}
}

自定义的两个线程,仍然能够结束。原因是:现在有三个线程main,t1,t2。将t1,t2标记为后台线程,当前台main结束后,后台线程自动结束了,即所有线程结束。
setDeamon方法必须在开启前调用。
当所有的守护线程结束后,jvn退出。

一个应用简介:有个输入线程和输出线程,当输入线程结束输入时,输出线程也就没存在的意义了,设为后台,自动结束。

posted @ 2017-07-14 10:06  测试开发分享站  阅读(104)  评论(0编辑  收藏  举报