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);
}
}