Java多線程學習(五)

    在JDK庫中,Timer類主要負責計劃任務的功能,即在指定的時間開始執行某一個任務。Timer類負責設置任務計劃,TimerTask類負責封裝任務,執行任務的代碼要放到TimerTask的子類中。java

  1. 方法schedule(TimerTask task,Date time)的使用線程

    ①在指定的日期執行一次某一任務code

    public class MyTask extends TimerTask {
          public void run() {
             System.out.println("運行了,在"+ new Date());
         }
     }
    public class Run {
       private static Timer timer = new Timer();
       
       public static void main(String [] args) {
           MyTask myTask = new MyTask();
           SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
           String time = "2016-03-06 20:00:00";
           Date date = sdf.parse(time);
           
           timer.schedule(task, date);
       }
    }

    可是注意,在執行完計劃任務以後,進程仍一直處於運行狀態。由於建立一個Timer對象就是啓動一個新的線程,並且這個新的線程並非守護線程,他會一直運行。orm

    ②下面將以上的任務改成守護線程,執行完任務後就銷燬。對象

    public class MyTask extends TimerTask {
          public void run() {
             System.out.println("運行了,在"+ new Date());
         }
     }
    public class Run {
       private static Timer timer = new Timer(true);
       
       public static void main(String [] args) {
           MyTask myTask = new MyTask();
           SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
           String time = "2016-03-06 20:00:00";
           Date date = sdf.parse(time);
           
           timer.schedule(task, date);
       }
    }

    ③若是計劃時間早於當前時間,則會當即執行任務隊列

    ④Timer中容許有多個TimerTask任務。TimerTask是以隊列的方式一個一個被順序執行的,因此執行時間可能與預期有差距。進程

  2. 方法schedule(TimerTask task, Date fistTime, long period)的使用io

    在指定的日期後,按指定的間隔週期的無限循環執行某一任務。class

    TimerTask類的cancel()方法用於將自身從重複執行隊列中清除。而Timer中cancel()方法用於將任務隊列中的所有任務都清除。date

相關文章
相關標籤/搜索