java定時器的使用(Timer)


1、在應用開發中,經常需要一些週期性的操作,比如每5分鐘執行某一操作等。對於這樣的操作最方便、高效的實現方式就是使用

java.util.Timer工具類。

private java.util.Timer timer;
timer = new Timer(true);
timer.schedule(
new java.util.TimerTask() { public void run() { //server.checkNewMail(); 要操作的方法 } }, 0, 5*60*1000);
      第一個參數是要操作的方法,第二個參數是要設定延遲的時間,第三個參數是週期的設定,每隔多長時間執行該操作。

    使用這幾行代碼之後,Timer本身會每隔5分鐘調用一遍server.checkNewMail()方法,不需要自己啓動線程。Timer本身也是多

線程同步的,多個線程可以共用一個Timer,不需要外部的同步代碼。
2、
(1)Timer.schedule(TimerTask task,Date time)安排在制定的時間執行指定的任務。
(2)Timer.schedule(TimerTask task,Date firstTime ,long period)安排指定的任務在指定的時間開始進行重複的固定延遲執行.
(3)Timer.schedule(TimerTask task,long delay)安排在指定延遲後執行指定的任務.
(4)Timer.schedule(TimerTask task,long delay,long period)安排指定的任務從指定的延遲後開始進行重複的固定延遲執行.
(5)Timer.scheduleAtFixedRate(TimerTask task,Date firstTime,long period)安排指定的任務在指定的時間開始進行重複的固定

速率執行.
(6)Timer.scheduleAtFixedRate(TimerTask task,long delay,long period)安排指定的任務在指定的延遲後開始進行重複的固定速

率執行.


1.基礎

    Date,這個大家都認識了,用於保存日期信息,但不推薦進行日期操作及初始化特定日期

     Calendar及其子類GregorianCalendar:日曆類,日期操作,初始化特定日期。

    DateFormat及其子類SimpleDateformat: 日期格式化,日期的默認顯示方式不適合中國人,所以需要格式化爲中國人常用的格

式來顯示。

    取得當期日期, Date date=new Date();

    初始化特定日期:假設我們要得到日期爲2006-10-27日的對象,需要按如下方式獲得。

         Calendar cal = new GregorianCalendar(2006, 9, 27,0,0,0);
         Date date = cal.getTime();

     注意:date,getTime()取得的是當期時間的毫秒數,月份比實際的減1

      GregorianCalendar構造方法參數依次爲:年,月-1,日,小時,分,秒    

    格式化爲我們熟悉的方式顯示:

          DateFormat format=new SimpleDateFormat("yyyy-MM-dd HH;mm:ss");
          String chinesedate = format.format(date);

   日期 年,月,日,分,秒的取得

          Calendar cal = Calendar.getInstance();

          int year = cal.get(Calendar.YEAR);

          int month=cal.get(Calendar.MONTH)+1;

          int day = cal.get(Calendar.DAY_OF_MONTH);

           int hour = cal.get(Calendar.HOUR_OF_DAY);

          int minute = cal.get(Calendar.MINUTE);

           int second = cal.get(Calendar.SECOND);

           注意:月份,實際的月份要比Clendar得到的加1,因爲java月份是從0~11

2.日期基本操作

   得到兩個日期相差的天數

    Date endDate=..

    Date startDate = ...

   相差天數 int days=(int) ((endDate.getTime()-startDate.getTime())/(1000*24*60*60)+0.5);

   得到某個月的天數

    Calendar cal = Calendar.getInstance();

   int month=cal.getActualMaximum(Calendar.DAY_OF_MONTH);

   日期加1天

    cal.add(Calendar.DATE, 1);//日期加1天

    Calendar.YEAR,Calendar.MONTH,Calendar.WEEK_OF_YEAR),分別是年,月,周

3,java.sql,Date()和java.util.Date();

    前面我們說的都是java.util.Date類,java.sql.Date類是操作數據庫用的日期類型

   java.util.Date date=....

    java.sql.Date sqldate=new java.sql.Date(date.getTime());

   也可以這樣:String date="2005-11-10";

    java.sql.Date sqlDate=java.sql.Date.valueOf(date);

4,定時器

   a,編寫類,實現TimeTask接口,定時執行的代碼寫入run()方法中

   b. timer.schedule(TimeTask子類對象, 開始執行的日期, 週期);

   週期爲毫秒數

例子:

類MyTask:

import java.util.*;

public class MyTask extends TimerTask {
    public void run() {
        System.out.println("MyTask 正在執行...");
    }
}

類TimerDemo:

import java.util.Timer;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.Date;

public class TimerDemo {
    public static void main(String[] args) {
        Timer timer = new Timer();
        MyTask task = new MyTask();
        Calendar cal = new GregorianCalendar(2006, 9, 28, 12, 49, 0);
        Date date = cal.getTime();
        System.out.println("date :" + date.toLocaleString());
        timer.schedule(task, date, 1000);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章