线程的调度-守护线程

守护线程与普通线程写法上基本没有什么差别,调用线程对象的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次执行

 

 

你可能感兴趣的:(线程的调度-守护线程)