[java]代码库
/**
* Daemon(守护)线程 Daemon线程区别一般线程之处是:
* 只有虚拟机中的用户线程(非Daimon线程)全部结束,Daemon线程就会立即结束,并且也不会调用finally里的语句。
* daemon线程所产生的所有线程都是daemon的
*/
public class Daemon {
static class MainThread extends Thread {
public void run() {
System.out.println("MainThread is daemon? " + this.isDaemon());
System.out.println("MainThread begin!");
// 启动子线程
Thread sub1 = new SubThread();
// sub1线程为守护线程
sub1.setDaemon(true);
sub1.start();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
System.out.println("MainThread" + " finally");
}
System.out.println("MainThread end!");
}
}
static class SubThread extends Thread {
public void run() {
System.out.println("SubThread is daemon? " + this.isDaemon());
System.out.println("SubThread begin!");
int i = 0;
try {
while (i < 10) {
System.out.println("SubThread " + i++);
Thread.sleep(200);
}
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
System.out.println("SubThread finally");
}
System.out.println("SubThread end!");
}
}
public static void main(String[] args) {
System.out.println("Main begin!");
// 默认情况下mainThread是普通线程
Thread mainThread = new MainThread();
// 启动mainThread线程
mainThread.start();
try {
Thread.sleep(500);
} catch (InterruptedException e1) {
e1.printStackTrace();
}
System.out.println("Main end!");
}
}