第5章 定时器Timer
第5章 定時器Timer
標簽: Java多線程編程
《Java多線程編程核心技術》 個人筆記
第5章 定時器Timer
定時器Timer的使用
方法scheduleTimerTask task Date time的測試
方法scheduleTimerTask task Date firstTime long period的測試
方法scheduleTimerTask task long delay的測試
方法scheduleTimerTask task long delay long period的測試
方法scheduleAtFixedRateTimerTask task Date firstTime long period的測試
追趕性
本章著重掌握一下技術點:
定時器Timer的使用
在JDK庫中Timer類主要負責計劃任務的功能,也就是在指定的時間開始執行某一個任務。
Timer類的主要作用就是設置計劃任務,但封裝任務的類卻是TimerTask類
方法schedule(TimerTask task, Date time)的測試
該方法的作用是在指定的日期執行一次某一任務
public class Run1 {
private static Timer timer = new Timer(); //定時器
static public class MyTask extends TimerTask { //任務類br/>@Override
public void run() {
System.out.println("運行了!時間為:" + new Date());
}
}
public static void main(String[] args) {
try {
MyTask task = new MyTask();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String dateString = "2014-10-12 11:55:00";
}
將定時器設置為守護線程,構造參數傳入true:private static Timer timer = new Timer(True);
如果計劃時間早于當前時間,則立刻執行task任務
Timer中允許有多個TimerTask任務
public static void main(String[] args) {
try {
MyTask1 task1 = new MyTask1();
MyTask2 task2 = new MyTask2();
TimerTask是以隊列的方式一個一個被順序執行的,所以執行的時間有可能和預期的時間不一致,因為前面的任務有可能消耗的時間較長,則后面的任務運行的時間也會被延遲
方法schedule(TimerTask task, Date firstTime, long period)的測試
該方法的作用是在指定的日期之后,按指定的建個周期性地無限循環地執行某一任務
timer.schedule(task, dateRef, 4000); //每隔4秒執行一次
TimerTask類的方法cancel()的作用是將自身從任務隊列中清除,其他任務不受影響
static public class MyTaskA extends TimerTask {@Overridepublic void run() {System.out.println("A運行了!時間為:" + new Date());this.cancel();} }和TimerTask類的方法cancel()不同,Timer類中的cancel()方法的作用是將任務隊列中的全部任務清空,并且進程被銷毀
private static Timer timer = new Timer();
static public class MyTaskA extends TimerTask {br/>@Override
public void run() {
System.out.println("A運行了!時間為:" + new Date());
timer.cancel(); //全部清空
}
}
因為Timer類中的cancel()放油有時并沒有強盜queue鎖,所以有時并不一定會停止執行計劃任務
方法schedule(TimerTask task, long delay)的測試
該方法是以執行schedule(TimerTask task, long delay)方法當前的時間為參考時間,在此時間基礎上延遲指定的毫秒數后執行一次TimerTask任務
public static void main(String[] args) {MyTask task = new MyTask();Timer timer = new Timer();System.out.println("當前時間:" + new Date().toLocaleString());timer.schedule(task, 7000); }方法schedule(TimerTask task, long delay, long period)的測試
該方法的作用是以執行schedule(TimerTask task, long delay, long period)方法當前的時間為參考時間,在此時間基礎上延遲指定的毫秒數,再以某一間隔時間無線次數地執行某一任務
public static void main(String[] args) {MyTask task = new MyTask();Timer timer = new Timer();System.out.println("當前時間:"+new Date().toLocaleString());timer.schedule(task, 3000,5000); }方法scheduleAtFixedRate(TimerTask task, Date firstTime, long period)的測試
使用schedule方法:如果執行任務的時間沒有被延時,那么下一次任務的執行時間參考的是上一次任務的“開始”時的時間來計算
使用scheduleAtFixedRate方法:如果執行任務的時間沒有被延時,那么下一次任務的執行時間參考的是上一次任務的“結束”的時間來計算
延時則沒有區別,都是參考上一次任務“結束”時的時間來計算
追趕性
轉載于:https://blog.51cto.com/13545923/2053316
總結
以上是生活随笔為你收集整理的第5章 定时器Timer的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 直接打开php非法请求
- 下一篇: 图片自动播放和动态添加