守护线程与普通线程写法上基本没有什么差别,调用线程对象的setDaemon(true),可以将其设置为守护线程。
此方法的详细说明:
public final void setDaemon(boolean on) ,j将该线程标记为守护线程或用户线程,当正在运行的线程都是守护线程时,java虚拟机退出。
该方法必须在启动线程前调用。
该方法首先调用该线程的checkAccess方法,且不带任何参数,这可能抛出SecurityException(在当前线程中)
参数:on-如果为true,则将该线程标记为守护线程
抛出:IllegalThreadStateException-如果该线程处于活动状态
SecurityException-如果当前线程无法修改该线程;
另请参见:
isDeamon(),checkAccess();
package test;
public class Test {
public static void main(String[] args) {
Thread t1 = new MyCommon();
Thread t2 = new Thread(new MyDaemon());
t2.setDaemon(true);
t2.start();
t1.start();
}
}
class MyCommon extends Thread{
@Override
public void run() {
for(int i = 0 ; i < 10 ;i++){
System.out.println("线程1第"+i+"次执行");
try {
Thread.sleep(7);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
class MyDaemon implements Runnable{
@Override
public void run() {
for(int i = 0; i < 9999999L ; i++){
System.out.println("线程2第"+i+"次执行");
try {
Thread.sleep(7);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
运行结果:
线程2第0次执行
线程1第0次执行
线程2第1次执行
线程1第1次执行
线程1第2次执行
线程2第2次执行
线程2第3次执行
线程1第3次执行
线程2第4次执行
线程1第4次执行
线程2第5次执行
线程1第5次执行
线程2第6次执行
线程1第6次执行
线程1第7次执行
线程2第7次执行
线程2第8次执行
线程1第8次执行
线程2第9次执行
线程1第9次执行
线程2第10次执行
线程2第11次执行
线程2第12次执行
线程2第13次执行
线程2第14次执行