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

你可能感兴趣的:(java)