java守护线程。

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的进程未捕获退出信号。

posted @ 2014-04-21 14:48  宁静的天空  阅读(545)  评论(0编辑  收藏  举报