Atea - Hero's Grave

          面向對象,開源,框架,敏捷,云計算,NoSQL,商業智能,編程思想。

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            40 隨筆 :: 0 文章 :: 28 評論 :: 0 Trackbacks
          今日看了《Java Concurrency in Practice》的第6.2.5章節,才知道java.util.Timer真是問題多多啊。
          Timer任務執行過程中,如果下一次計時到了,會產生任務沖突問題。這在多線程的環境下會更加突出。
          另外如果Timer任務執行過程中發生異常,Timer仍然會繼續工作!

          jdk5的java.util.concurrent.ScheduledExecutorService很好的解決了以上問題:
           1 import java.util.concurrent.Executors;
           2 import java.util.concurrent.ScheduledExecutorService;
           3 import java.util.concurrent.ScheduledFuture;
           4 import static java.util.concurrent.TimeUnit.*;
           5 
           6 public class BeeperControl {
           7 
           8     private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
           9     private int count = 0;
          10 
          11     public void beepForAnHour() {
          12         final Runnable beeper = new Runnable() {
          13 
          14             public void run() {
          15                 if (count == 5) {
          16                     int i = 1 / 0;
          17                 }
          18                 System.out.println(count++);
          19             }
          20         };
          21         final ScheduledFuture<?> beeperHandle = scheduler.scheduleAtFixedRate(beeper, 51, SECONDS);
          22         scheduler.schedule(new Runnable() {
          23 
          24             public void run() {
          25                 System.out.println("cancel!");
          26                 beeperHandle.cancel(true);
          27                 scheduler.shutdown();
          28             }
          29         }, 15, SECONDS);
          30     }
          31 }

          PS:
          Spring和EJB都有自己的定時任務功能,也是比較好的選擇。
          posted on 2008-11-25 09:33 Atea 閱讀(4417) 評論(0)  編輯  收藏 所屬分類: Java language
          主站蜘蛛池模板: 毕节市| 霍林郭勒市| 富宁县| 资阳市| 枣强县| 获嘉县| 卢湾区| 远安县| 洪雅县| 罗江县| 乐山市| 宜章县| 乌恰县| 蓬溪县| 夏河县| 龙里县| 团风县| 南川市| 武平县| 张家口市| 元氏县| 武威市| 谢通门县| 原阳县| 连南| 苍南县| 清涧县| 石台县| 江达县| 运城市| 万山特区| 辽阳县| 长沙县| 湄潭县| 晋江市| 高要市| 保亭| 临泽县| 渭源县| 洛南县| 吴忠市|