Posted on 2009-06-02 21:26
啥都写点 阅读(274)
评论(0) 编辑 收藏 所属分类:
J2SE
关键技术:
- Thread的setDaemon实例方法设置线程是否为守护线程,参数为true表示该线程为守护线程。
- 线程被运行后,setDaemon实例方法无效,即必须在调用start方法之前调用setDaemon方法,才能设置线程为守护线程。
- 程序中启动的线程默认为非守护线程,但在守护线程中启动的线程都是守护线程。
- 当程序中所有非守护线程都结束时,守护线程无条件地被立即结束。
package book.thread;
/**
* 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!");
}
}
-- 学海无涯