實踐
實踐一下看看:
DancingRobot.java
package com.java.study.robot;
import java.text.SimpleDateFormat;
import java.util.TimerTask;
public class DancingRobot extends TimerTask {
@Override
public void run() {
// 獲取最近一次任務計劃執行的時間,並將其格式化
SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println("schedule exec time is "
+ sf.format(scheduledExecutionTime()));
System.out.println("DancingRobot is dancing...");
}
}
WaterRobot.java
package com.java.study.robot;
import java.text.SimpleDateFormat;
import java.util.Timer;
import java.util.TimerTask;
public class WaterRobot extends TimerTask {
// 桶的最大容量假設爲5L,初始化爲0L
private int bucketCapacity = 0;
private Timer timer;
// 構造器給timer賦值
public WaterRobot(Timer timer) {
this.timer = timer;
}
@Override
public void run() {
// 灌水直至桶滿爲止
if (bucketCapacity < 5){
System.out.println("WaterRobot is watering... 1L once.");
bucketCapacity++;
} else {
// 水滿就停止執行任務了
System.out.println("the bucket is full!!!");
System.out.println("the num of canceled tasks in timer is " + timer.purge());
cancel();
System.out.println("the num of canceled tasks in timer is " + timer.purge());
// 灌水任務停止後,等待兩秒, 然後停止所有任務即(DancingRobot任務也被停止)
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
timer.cancel(); //停止所有任務即(DancingRobot任務也被停止)
}
}
}
Executor.java
package com.java.study.robot;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Timer;
public class Executor {
public static void main(String[] args) {
Timer timer = new Timer();
// 獲取當前時間
Calendar calendar = Calendar.getInstance();
SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println("current time is " + sf.format(calendar.getTime()));
DancingRobot dr = new DancingRobot();
WaterRobot wr = new WaterRobot(timer); // 水滿之後停2秒,停止所有機器人任務,所以需要穿timer參數給WaterRobot
timer.schedule(dr, calendar.getTime(), 2000);
timer.scheduleAtFixedRate(wr, calendar.getTime(), 1000);
}
}
執行效果: