一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

java Timer學習筆記

 風_宇星 2014-04-21

Java自帶的java.util.Timer類,通過調度一個java.util.TimerTask任務。這種方式可以讓程序按照某一個頻度執(zhí)行,但不能指定時間運行。用的較少。

任務的調用通過起的子線程進行執(zhí)行。

java.util.Timer

java.util.TimerTask

一、調用方法:

(1)void java.util.Timer.schedule(TimerTask task, long delay):多長時間(毫秒)后執(zhí)行任務

(2)void java.util.Timer.schedule(TimerTask task, Date time):設定某個時間執(zhí)行任務

(3)void java.util.Timer.schedule(TimerTask task, long delay, long period):delay時間后開始執(zhí)行任務,并每隔period時間調用任務一次。

(4)void java.util.Timer.schedule(TimerTask task, Date firstTime, long period):第一次在指定firstTime時間點執(zhí)行任務,之后每隔period時間調用任務一次。

(5)void java.util.Timer.scheduleAtFixedRate(TimerTask task, long delay, long period):delay時間后開始執(zhí)行任務,并每隔period時間調用任務一次。

(6)void java.util.Timer.scheduleAtFixedRate(TimerTask task, long delay, long period):第一次在指定firstTime時間點執(zhí)行任務,之后每隔period時間調用任務一次。

void java.util.Timer.cancel():終止該Timer

boolean java.util.TimerTask.cancel():終止該TimerTask

可以為每個Timer指定多個TimerTask


雖然可通過void java.util.Timer.schedule(TimerTask task, Date firstTime, long period)方法完成“例如:每天上午10點執(zhí)行一次”的業(yè)務,但該實現(xiàn)是基于進行一天(1000 * 60 * 60 * 24毫秒)進行延遲的機制實現(xiàn)的,并不是指定某個具體時間進行執(zhí)行的。

對于該種需求,可通過Quartz來進行實現(xiàn)


二、方法名稱schedule()和scheduleAtFixedRate()兩者的區(qū)別

當需要根據(jù)period區(qū)間時間循環(huán)多次調用任務的時候,會存在兩種不同的策略,兩種方法提供了不同的策略。

調用方法(1)、(2)只是單次執(zhí)行,不存在多次調用任務的情況,所以沒有提供scheduleAtFixedRate方法的調用方式。

<1>schedule()方法更注重保持間隔時間的穩(wěn)定:保障每隔period時間可調用一次
<2>scheduleAtFixedRate()方法更注重保持執(zhí)行頻率的穩(wěn)定:保障多次調用的頻率趨近于period時間,如果某一次調用時間大于period,下一次就會盡量小于period,以保障頻率接近于period


三、示例

(1)

  1. /** 
  2.  * 第一種方法:設定多長時間(毫秒)后執(zhí)行任務 
  3.  */  
  4. public static void timer1() {  
  5.     final StopWatch watch = new StopWatch();  
  6.     watch.start();  
  7.     Timer timer = new Timer();  
  8.     /* void java.util.Timer.schedule(TimerTask task, long delay) */  
  9.     timer.schedule(new TimerTask() {  
  10.         public void run() {  
  11.             watch.stop();  
  12.             System.out.println("-------任務執(zhí)行--------");  
  13.             System.out.println(watch.getTime());  
  14.         }  
  15.     }, 2000);// delay=2000毫秒 后執(zhí)行該任務  
  16. }  
(2)

  1. /** 
  2.  * 第二種方法:設定某個時間執(zhí)行任務 
  3.  */  
  4. public static void timer2() {  
  5.     Calendar calendar = new GregorianCalendar();  
  6.     calendar.add(Calendar.MINUTE, 1);  
  7.     calendar.set(Calendar.SECOND, 0); // 一分鐘后執(zhí)行  
  8.     Timer timer = new Timer();  
  9.     /* void java.util.Timer.schedule(TimerTask task, Date time) */  
  10.     timer.schedule(new TimerTask() {  
  11.         @Override  
  12.         public void run() {  
  13.             System.out.println("-------任務執(zhí)行--------");  
  14.         }  
  15.     }, calendar.getTime());  
  16. }  
(3)

  1. /** 
  2.  * 第三種方法:設定指定任務task在指定延遲delay后進行固定延遲peroid的執(zhí)行 
  3.  */  
  4. public static void timer3() {  
  5.     Timer timer = new Timer();  
  6.     final StopWatch watch = new StopWatch();  
  7.     watch.start();  
  8.     System.out.println(Thread.currentThread().getName());  
  9.     /* 
  10.      * void java.util.Timer.schedule(TimerTask task, long delay, long 
  11.      * period) 
  12.      */  
  13.     timer.schedule(new TimerTask() {  
  14.         public void run() {  
  15.             /* 子線程進行任務的執(zhí)行 */  
  16.             System.out.println(Thread.currentThread().getName());  
  17.             System.out.println("-------設定要指定任務--------");  
  18.             watch.suspend();  
  19.             System.out.println(watch.getTime());  
  20.             watch.reset();  
  21.             watch.start();  
  22.         }  
  23.     }, 1000, 1000);  
  24. }  
(4)

  1. /** 
  2.  * 固定延遲peroid時間后執(zhí)行;peroid時間不是以任務執(zhí)行完的時間為計算起點(某次任務執(zhí)行完成后,經過peroid時間后再次調用[不是這樣的])。 
  3.  * 而是每隔peroid時間調用任務一次。當任務執(zhí)行的時間小于peroid時間,可以保證每隔peroid時間調用一次。 
  4.  * 當任務的執(zhí)行時間大于peroid時間時,從現(xiàn)象上看:任務一執(zhí)行完,就會立刻進入下一次任務的執(zhí)行 
  5.  */  
  6. public static void timer3a() {  
  7.     Timer timer = new Timer();  
  8.     final StopWatch watch = new StopWatch();  
  9.     watch.start();  
  10.     timer.schedule(new TimerTask() {  
  11.         Integer i = 1;  
  12.         public void run() {  
  13.             System.out.println(watch.getTime());  
  14.             System.out.println("########第" + i + "次執(zhí)行開始########");  
  15.             try {  
  16.                 Thread.sleep(400);  
  17.             } catch (InterruptedException e) {  
  18.                 e.printStackTrace();  
  19.             }  
  20.             System.out.println("########第" + i + "次執(zhí)行結束########");  
  21.             i++;  
  22.             watch.reset();  
  23.             watch.start();  
  24.         }  
  25.     }, 1000, 500);  
  26. }  

period:500毫秒;每次任務執(zhí)行時間400毫秒;所以每次任務執(zhí)行完成后到下一次任務調用開始的時間趨近于100毫秒

打印日志信息:

  1. 1000  
  2. ########第1次執(zhí)行開始########  
  3. ########第1次執(zhí)行結束########  
  4. 109  
  5. ########第2次執(zhí)行開始########  
  6. ########第2次執(zhí)行結束########  
  7. 93  
  8. ########第3次執(zhí)行開始########  
  9. ########第3次執(zhí)行結束########  
  10. 93  
  11. ########第4次執(zhí)行開始########  
  12. ########第4次執(zhí)行結束########  
  13. 93  
  14. ########第5次執(zhí)行開始########  
  15. ########第5次執(zhí)行結束########  
  16. 93  
  17. ########第6次執(zhí)行開始########  
  18. ########第6次執(zhí)行結束########  
  19. 93  
  20. ########第7次執(zhí)行開始########  
  21. ########第7次執(zhí)行結束########  
  22. 93  
  23. ########第8次執(zhí)行開始########  
當將Thread.sleep(400);修改為Thread.sleep(600)時:

打印日志信息:

  1. 1000  
  2. ########第1次執(zhí)行開始########  
  3. ########第1次執(zhí)行結束########  
  4. 0  
  5. ########第2次執(zhí)行開始########  
  6. ########第2次執(zhí)行結束########  
  7. 0  
  8. ########第3次執(zhí)行開始########  
  9. ########第3次執(zhí)行結束########  
  10. 0  
  11. ########第4次執(zhí)行開始########  
  12. ########第4次執(zhí)行結束########  
  13. 0  
  14. ########第5次執(zhí)行開始########  

(5)

  1. /** 
  2.  * 第四種方法:安排指定的任務task在指定的時間firstTime開始進行重復的固定速率period執(zhí)行 
  3.  * 每天中午12點都執(zhí)行一次 
  4.  */  
  5. public static void timer4() {  
  6.     Calendar calendar = Calendar.getInstance();  
  7.     calendar.set(Calendar.HOUR_OF_DAY, 12); // 控制時  
  8.     calendar.set(Calendar.MINUTE, 0); // 控制分  
  9.     calendar.set(Calendar.SECOND, 0); // 控制秒  
  10.   
  11.     Date time = calendar.getTime(); // 得出執(zhí)行任務的時間,此處為今天的12:00:00  
  12.   
  13.     Timer timer = new Timer();  
  14.     /* void java.util.Timer.schedule(TimerTask task, Date firstTime, long period) */  
  15.     timer.schedule(new TimerTask() {  
  16.         public void run() {  
  17.             System.out.println("-------設定要指定任務--------");  
  18.         }  
  19.     }, time, 1000 * 60 * 60 * 24);// 這里設定將延時每天固定執(zhí)行  
  20. }  
(6)

  1. /** 
  2.  * 第五種方法:設定指定任務task在指定延遲delay后進行固定頻率peroid的執(zhí)行。 
  3.  * timer.schedule和timer.scheduleAtFixedRate的區(qū)別: 
  4.  * (1)schedule()方法更注重保持間隔時間的穩(wěn)定:保障每隔period時間可調用一次 
  5.  * (2)scheduleAtFixedRate()方法更注重保持執(zhí)行頻率的穩(wěn)定:保障多次調用的頻率趨近于period時間,如果某一次調用時間大于period,下一次就會盡量小于period,以保障頻率接近于period 
  6.  */  
  7. public static void timer5() {  
  8.     Timer timer = new Timer();  
  9.     /* void java.util.Timer.scheduleAtFixedRate(TimerTask task, long delay, long period) */  
  10.     timer.scheduleAtFixedRate(new TimerTask() {  
  11.         public void run() {  
  12.             System.out.println("-------設定要指定任務--------");  
  13.         }  
  14.     }, 1000, 500);  
  15. }  

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    女人精品内射国产99| 国产一级精品色特级色国产| 久久精品一区二区少妇| 欧美大粗爽一区二区三区| 福利在线午夜绝顶三级| 中文字幕日韩欧美亚洲午夜| 俄罗斯胖女人性生活视频| 激情爱爱一区二区三区| 日韩人妻一区中文字幕| 少妇激情在线免费观看| 欧美午夜色视频国产精品| 国产一级内射麻豆91| 日韩精品在线观看完整版| 高清免费在线不卡视频| 在线观看视频国产你懂的| 又色又爽又无遮挡的视频| 高清不卡一卡二卡区在线| 美女被草的视频在线观看| 国产精品免费视频视频| 亚洲熟女国产熟女二区三区| 免费精品国产日韩热久久| 久草国产精品一区二区| 午夜精品福利视频观看| 大伊香蕉一区二区三区| 麻豆视传媒短视频在线看| 亚洲精品熟女国产多毛| 午夜精品国产精品久久久| 爱在午夜降临前在线观看| 91亚洲人人在字幕国产| 麻豆印象传媒在线观看| 色鬼综合久久鬼色88| 久久免费精品拍拍一区二区| 九九热这里有精品20| 亚洲一级在线免费观看| 高清欧美大片免费在线观看| 日韩精品在线观看一区| 国产成人免费高潮激情电| 欧美亚洲美女资源国产| 亚洲精品中文字幕欧美| 欧美丰满大屁股一区二区三区| 欧美午夜视频免费观看|