Java多線程與併發應用-(1)-定時任務1-Timer的使用

真是受夠了多線程的問題,今天開始就自己總結一下    

        Timer類和TimerTask類配合使用。Timer負責控制線程的執行時間,TimerTask中寫業務代碼,他實現了Runnable接口。但run()方法並沒有實現,是一個抽象類。

Timer提供的API :

schedule的不同重載方法可以,支持多少秒之後執行,間隔多長時間執行,具體某個Date執行,他提供的API並不強大,適合簡單的定時任務。比如10分鐘後執行。但複雜的定時任務,並沒有給出相應的API,比如,每隔一月的一號執行任務。如果有這樣的需求,則使用quartz。quartz這裏不做詳細解釋,以後的文章中可能再做詳解。

例:如何用timer和TimerTask實現 一個炸彈每隔2秒炸一次,另一個每隔3秒炸一次

package com.lipeng;

import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;

public class TimerDemo {

	public static int count=0;
	/**
	 * @param args
	 */
	public static void main(String[] args) throws Exception{
		new Timer().schedule(new BoomTimeTask(), 2000);
		while(true)
		{
			Thread.sleep(1000);
			System.out.println(new Date().getSeconds());
		}
	}

}


class BoomTimeTask extends TimerTask
{

	@Override
	public void run() {
		System.out.println("boom!!!!!!!!!!!!!!!!!!!!!!!!!");
		TimerDemo.count++;
		new Timer().schedule(new BoomTimeTask(), TimerDemo.count%2==0?2000:3000);
	}
	
}

思路:

1.首先schedule方法中,schedule(TimerTask task, long delay) ,delay之後執行一邊線程就結束了,而schedule(TimerTask task, long delay, long period) 是delay後執行以後每period都會執行一遍run方法,並不會死掉。

2. 第一個炸彈啓動2秒之後炸,炸完啓動第二個炸彈,3秒之後第二個炸彈炸,再啓動一次第一個炸彈,如此循環。即遞歸的使用炸彈,調用炸彈的方法(run方法)。每次要執行的任務一樣即run方法,只不過每次的執行時間不同,每隔一次2,3秒輪流換。這就要求定義一個全局的標識count來做開關。

注:以上例子來自張孝祥老師的-Java多線程與併發庫高級應用

     

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章