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 閱讀(4413) 評論(0)  編輯  收藏 所屬分類: Java language
          主站蜘蛛池模板: 汉川市| 海兴县| 南安市| 桐乡市| 保亭| 金山区| 南宫市| 兴安盟| 工布江达县| 翁牛特旗| 尉犁县| 平乐县| 德清县| 山阳县| 五莲县| 屯门区| 革吉县| 七台河市| 台北县| 二连浩特市| 南木林县| 兴国县| 渝北区| 长白| 凤山市| 通化县| 阜阳市| 神农架林区| 喀喇沁旗| 上蔡县| 米泉市| 探索| 永平县| 洛隆县| 恩平市| 怀远县| 论坛| 湘潭县| 固安县| 秀山| 上林县|