java的守护线程:具体定义我也不太清楚,百度和谷歌了看的也不是很明白,但是啊,下边有给出一个例子自己领悟吧。
一、计时器的Timer声明时是否声明为守护线程对计时器的影响。
/** * */ package timer_test; import java.util.Date; import java.util.Timer; import java.util.TimerTask; /** * @author 9082046**@qq.com * */ public class TimerSchedule { /** * @param args */ public static void main(String[] args) { long timestamp = System.currentTimeMillis(); Date date=new Date(); date.setTime(timestamp+2*1000);//计时器两秒后输出:2和时间戳。 Timer timer=new Timer(true);//是否设置成守护进程,true和false。 OneTask task=new OneTask(); System.out.println("1:"+timestamp); timer.schedule(task, date); try { //如果取消主线程的睡眠,在守护线程设置成true时 2和时间戳的输出语句将不会被执行。 Thread.sleep(5*1000);// } catch (InterruptedException e) { } } } class OneTask extends TimerTask { public void run() { long timestamp = System.currentTimeMillis(); System.out.println("2:"+timestamp); } }
假设称负责启动守护线程的线程为主线程,在主线程中新启动的且被设置成守护:true的线程称为辅助线程。
如果主线程的任务走到终点了,则不管辅助线程的任务是否完成了、辅助线程一定会被终结的。
如上边代码中的主线程的睡眠5秒的代码被注释掉,则定时器的TimerTask中的输出语句不会被执行的。
个人感觉:类似于erlang的spawn_link,具体场景为:当前进程设置成捕获退出信号、当前进程spawn_link的进程未捕获退出信号。