java中的后台线程

一.  java中的后台线程:

      java线程大家都不陌生,可以用继承Thread类或者实现Runable接口来定义一个自己的线程。另外,java线程还可以分为前台线程(也称用户线程或普通线程)和后台线程(Daemon thread),本篇就是要说明这两者的区别和用法。

     1.  后台线程会随着主程序的结束而结束,但是前台进程则不会;或者说,只要有一个前台线程未退出,进程就不会终止。(下面的例子会充分说明这一点);

     2.  默认情况下,程序员创建的线程是用户线程;用setDaemon(true)可以设置线程为后台线程;而用isDaemon( )则可以判断一个线程是前台线程还是后台线程;

     3. jvm的垃圾回收器其实就是一个后台线程;

     4. setDaemon函数必须在start函数之前设定,否则会抛出IllegalThreadStateException异常;

二.  例子:

public class RunnableTest implements Runnable {
private String name;
private long delay;
public static void main(String args[]) {
RunnableTest r = new RunnableTest("thread1",200);
Thread t = new Thread(r);
t.setDaemon(true);  //后台线程
t.start();
try {
System.in.read();
}
catch(Exception e) {


}
System.out.println("end main");
}
public RunnableTest(String name,long delay) {
this.name = name;
this.delay = delay;
}
public void run(){
try {
while(true) {
System.out.println(name);
Thread.sleep(delay);
}
}
catch(Exception e) {
System.out.println("Exception");
}
}
}
/*

测试结果:

case 1:     t.setDaemon(truer);   //后台线程

 thread1

thread1

thread1
......

thread1
end main


case 2:     t.setDaemon(false);   //前台线程,相当于不调用setDaemon 

 thread1

thread1

thread1

......

thread1
end main

thread1

thread1

thread1

......


*/

三.  说明:

 1.   在测试过程中,对于上面的case1中的执行,当用户按下回车键,打印完end main,随之整个程序结束,任务管理器中的进程列表中的java.exe(也就是本程序的进程)结束。

2.  对于case2的代码, 当用户按下回车键,打印完end main, 继续打印thread1, 查看任务管理器的进程列表,java.exe(也就是本程序的进程)并没有退出,直到强行结束它,进程才退出,代码也停止打印thread1。



你可能感兴趣的:(Java)