程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Java准時義務的三種完成辦法

Java准時義務的三種完成辦法

編輯:關於JAVA

Java准時義務的三種完成辦法。本站提示廣大學習愛好者:(Java准時義務的三種完成辦法)文章只能為提供參考,不一定能成為您想要的結果。以下是Java准時義務的三種完成辦法正文


譯者注:小我認為用准時義務來跑渣滓收受接管不是很好的例子,從譯者接觸到的項目來看,比擬罕見的是用准時義務來停止非及時盤算,消除暫時數據、文件等。
在本文裡,我會給年夜家引見3種分歧的完成辦法:
1.通俗thread完成
2.TimerTask完成
3.ScheduledExecutorService完成

1、通俗thread

這是最多見的,創立一個thread,然後讓它在while輪回裡一向運轉著,經由過程sleep辦法來到達准時義務的後果。如許可以疾速簡略的完成,代碼以下:

public class Task1 {
public static void main(String[] args) {
  // run in a second
  final long timeInterval = 1000;
  Runnable runnable = new Runnable() {
  public void run() {
    while (true) {
      // ------- code for task to run
      System.out.println("Hello !!");
      // ------- ends here
      try {
       Thread.sleep(timeInterval);
      } catch (InterruptedException e) {
        e.printStackTrace();
      }
      }
    }
  };
  Thread thread = new Thread(runnable);
  thread.start();
  }
}

2、用Timer和TimerTask

下面的完成長短常疾速輕便的,但它也缺乏一些功效。
用Timer和TimerTask的話與上述辦法比擬有以下利益:

1.當啟動和去撤消義務時可以掌握
2.第一次履行義務時可以指定你想要的delay時光

在完成時,Timer類可以調劑義務,TimerTask則是經由過程在run()辦法裡完成詳細義務。
Timer實例可以調劑多義務,它是線程平安的。
當Timer的結構器被挪用時,它創立了一個線程,這個線程可以用來調劑義務。
上面是代碼:

import java.util.Timer;
import java.util.TimerTask;
public class Task2 {
  public static void main(String[] args) {
    TimerTask task = new TimerTask() {
      @Override
      public void run() {
        // task to run goes here
        System.out.println("Hello !!!");
      }
    };
    Timer timer = new Timer();
    long delay = 0;
    long intevalPeriod = 1 * 1000;
    // schedules the task to be run in an interval
    timer.scheduleAtFixedRate(task, delay,
                                intevalPeriod);
  } // end of main
}
這些類從JDK 1.3開端存在。

3、ScheduledExecutorService

ScheduledExecutorService是從Java SE 5的java.util.concurrent裡,做為並發對象類被引進的,這是最幻想的准時義務完成方法。
比擬於上兩個辦法,它有以下利益:

1.比擬於Timer的單線程,它是經由過程線程池的方法來履行義務的
2.可以很靈巧的去設定第一次履行義務delay時光
3.供給了優越的商定,以便設定履行的時光距離

上面是完成代碼,我們經由過程ScheduledExecutorService#scheduleAtFixedRate展現這個例子,經由過程代碼裡參數的掌握,初次履行加了delay時光。


import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
public class Task3 {
  public static void main(String[] args) {
    Runnable runnable = new Runnable() {
      public void run() {
        // task to run goes here
        System.out.println("Hello !!");
      }
    };
    ScheduledExecutorService service = Executors
                    .newSingleThreadScheduledExecutor();
    service.scheduleAtFixedRate(runnable, 0, 1, TimeUnit.SECONDS);
  }
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved