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都为后台线程,于是,随着主线程的运行完毕而立马结束。