后台线程

package com.roocon.thread.t2;

public class Demo1 extends Thread {

    public Demo1(String name){
        super(name);
    }

    @Override
    public void run() {
        try{
            while(true){
                System.out.println(getName()+"线程执行了");
                Thread.sleep(1000);
            }
        }catch (InterruptedException e){
            e.printStackTrace();
        }finally {
            System.out.println("finally不会被后台线程执行");
        }
    }

    public static void main(String[] args) {
        Demo1 d1 = new Demo1("first-thread");
        Demo1 d2 = new Demo1("second-thread");
        d1.setDaemon(true);
        d2.setDaemon(true);
        d1.start();
        d2.start();
        System.out.println("main方法执行即将结束");
    }
}

输出结果:

main方法执行即将结束
second-thread线程执行了
first-thread线程执行了

对以上代码的解释:

在main方法中,main为主线程,当主线程执行完输出语句时,cpu被second-thread和first-thread抢去执行了,当main主线程再次抢的cpu执行时,发现main方法中已经没有需要执行的代码,故main方法结束。然后,由于second-thread和first-thread都为后台线程,于是,随着主线程的运行完毕而立马结束。

posted @ 2017-12-06 23:23  凌晨六点半  阅读(129)  评论(0编辑  收藏  举报