1. 程式人生 > 程式設計 >Java 定時器的使用示例

Java 定時器的使用示例

最近要用到定時任務,就是超過48小時的資料給關閉,前臺就不顯示了。還是頭一次使用java的定時器,。。java定時器使用Timer類。有時間得看下原始碼了,看看具體咋弄的。

Timer主要用於Java執行緒裡指定時間或週期執行任務。Timer是執行緒安全的,但不提供實時性(real-time)保證。先看看呼叫timer的幾種方式。

  /**
   * 這個方法是排程一個task,經過2000(ms)後開始進行排程,僅僅排程一次。
   */
  public static void timer1(){
    Timer nTimer = new Timer();
    nTimer.schedule(new TimerTask() {
      @Override
      public void run() {
        System.out.println("----設定要指定任務-----");
      }
    },2000);
  }
 
  /**
   * 在指定的時間點time上排程一次。
   */
  public static void timer2() {
    Timer timer = new Timer();
    timer.schedule(new TimerTask() {
      public void run() {
        System.out.println("-------延遲5000毫秒,每1000毫秒執行一次--------");
      }
    },time);
  }
 
  /**
   * 延遲5000毫秒,每1000毫秒執行一次
   * 在5000(ms)後開始排程,每次排程完後,最少等待1000(ms)後才開始排程。
   */
  public static void timer3() {
    Timer timer = new Timer();
    timer.scheduleAtFixedRate(new TimerTask() {
      public void run() {
        System.err.println("-------延遲5000毫秒,每1000毫秒執行一次--------");
      }
    },5000,1000);
  }
  /**
   * 設定17:56執行任務(第一次排程的時間),每過一天執行一次
   * java.util.Timer.scheduleAtFixedRate(TimerTask task,Date firstTime,long period)
   */
  public static void timer4() {
    Calendar calendar = Calendar.getInstance();
    calendar.set(Calendar.HOUR_OF_DAY,17);
    calendar.set(Calendar.MINUTE,26);
    calendar.set(Calendar.SECOND,0);
 
    Date time = calendar.getTime();
 
    Timer timer = new Timer();
    timer.scheduleAtFixedRate(new TimerTask() {
      public void run() {
        System.out.println("-------設定要指定任務--------");
      }
    },time,1000 * 60 * 60 * 24);// 這裡設定將延時每天固定執行
  }

以上就是呼叫的幾種方法,再貼下我的程式碼

    // 時間間隔(一天)
    long periodDay = 24 * 60 * 60 * 1000;
    Calendar calendar = Calendar.getInstance();
    calendar.set(Calendar.HOUR_OF_DAY,1); // 凌晨1點
    calendar.set(Calendar.MINUTE,0);
    calendar.set(Calendar.SECOND,0);
    Date date = calendar.getTime(); // 第一次執行定時任務的時間
    // 如果第一次執行定時任務的時間 小於當前的時間
    // 此時要在 第一次執行定時任務的時間加一天,以便此任務在下個時間點執行。如果不加一天,任務會立即執行。
    if (date.before(new Date())) {
      date = this.addDay(date,1);
    }
    new Timer().scheduleAtFixedRate(new TimerTask() {
      public void run() {
        Date now = new Date();
        //查出所有未關閉資料
        List<BankWork> list = bankWorkService.findList(new BankWork().setStatus(Const.DEFAULT_STATUS));
        //篩選出超過48小時的未關閉資料
        list = list.stream().filter(e -> {
          try {
            return judgmentDate(e.getModifiedTime(),now);
          } catch (Exception e1) {
            e1.printStackTrace();
          }
          return false;
        }).collect(Collectors.toList());
        list.forEach(e -> e.setStatus(Const.BANK_WORK_STATUS_OK).setModifiedTime(now));
        //修改所有未關閉資料為關閉
        bankWorkService.updateAsGroup(list);
      }
    },date,periodDay);
     
    // 判斷時間是否超過48小時
  private static boolean judgmentDate(Date date1,Date date2) throws Exception {
 
    long cha = date2.getTime() - date1.getTime();
    if (cha < 0) {
      return false;
    }
    double result = cha * 1.0 / (1000 * 60 * 60);
    if (result <= 48) {
      return true;
    } else {
      return false;
    }
 
  }
 
  // 增加或減少天數
  private Date addDay(Date date,int num) {
    Calendar startDT = Calendar.getInstance();
    startDT.setTime(date);
    startDT.add(Calendar.DAY_OF_MONTH,num);
    return startDT.getTime();
  }

以上就是Java 定時器的使用示例的詳細內容,更多關於Java 定時器的資料請關注我們其它相關文章!