很多時候,我們需要週期性的執行某個任務,在JDK1.5之前,有一個Timer類。其官方文檔中這樣描述一種工具,線程用其安排以後在後臺線程中執行的任務。可安排任務執行一次,或者定期重複執行其執行任務的時候,需要調用schedule方法。schedule重構了四個方法,如下:
void schedule(TimerTask task, Date time) // 安排在指定的時間執行指定的任務
void schedule(TimerTask task, Date firstTime, long period) //安排指定的任務在指定的時間開始進行重複的固定延遲執行
void schedule(TimerTask task, long delay) //安排在指定延遲後執行指定的任務
void schedule(TimerTask task, long delay, long period) //安排指定的任務從指定的延遲後開始進行重複的固定延遲執行
以Timer爲例,實現下面幾個小例子:
一:5秒後執行任務,之後每隔3秒執行一次。
public class TimerTest01 {
public static void main(String[] args) {
new Timer().schedule(new TimerTask() {
@Override
public void run() {
System.out.println("Task_finished");
}
},5000,3000);
while (true) {
System.out.println(new Date().getSeconds());
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
二:5秒之後執行TimerTak1,之後2秒執行TimerTask2,然後4秒後執行TimerTask1,再2秒後執行TimerTask2,4秒後執行TimerTask1,依次循環。
public class TimerTest02 {
static class TimerTask1 extends TimerTask {
@Override
public void run() {
System.out.println("TimerTask1_booming");
new Timer().schedule(new TimerTask2(), 2000);
}
}
static class TimerTask2 extends TimerTask {
@Override
public void run() {
System.out.println("TimerTask2_booming");
new Timer().schedule(new TimerTask1(), 4000);
}
}
public static void main(String[] args) {
new Timer().schedule(new TimerTask1(), 5000);
while (true) {
System.out.println(new Date().getSeconds());
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
相關文章:Java線程池