① 請問java中,怎麼設置程序的運行間隔,Timer應該怎麼用
publicclasstimerextendsThread
{
publicstaticvoidmain(String[]args)
{
timerrunner=newtimer();
runner.start();
}
publicvoidrun(){
for(inti=0;i<10;i++){
System.out.println(i);
try{
Thread.sleep(1000);//睡眠1000毫秒
}catch(InterruptedExceptione){e.printStackTrace();}
}
}
}
② JAVA TIMER怎麼樣使用
void cancel()
終止此計時器,丟棄所有當前已安排的任務。
int purge()
從此計時器的任務隊列中移除所有已取消的任務。
void schele(TimerTask task, Date time)
安排在指定的時間執行指定的任務。
void schele(TimerTask task, Date firstTime, long period)
安排指定的任務在指定的時間開始進行重復的固定延遲執行。
void schele(TimerTask task, long delay)
安排在指定延遲後執行指定的任務。
void schele(TimerTask task, long delay, long period)
安排指定的任務從指定的延遲後開始進行重復的固定延遲執行。
void scheleAtFixedRate(TimerTask task, Date firstTime, long period)
安排指定的任務在指定的時間開始進行重復的固定速率執行。
void scheleAtFixedRate(TimerTask task, long delay, long period)
安排指定的任務在指定的延遲後開始進行重復的固定速率執行。
我前幾天剛用過 這是我的代碼:
timer.scheleAtFixedRate(new TimerTask(), ConfigUtil.TIME_DELAY, Integer.parseInt(distance)*60000);
三個解釋:new TimerTask()這是一個TimerTask對象,裡面有一個run()方法
是你想要執行的代碼。
ConfigUtil.TIME_DELAY這個是延遲的時間 (毫秒單位)
Integer.parseInt(distance)*60000 這個是每隔多長時間執行一次
TimerTask中的run()方法(毫秒單位)
簡單一點就是 寫成這樣:
Timer timer = new Timer();
timer.scheleAtFixedRate(new TimerTask(), 1000, 60000);
意思就是 每隔6秒(相當於60000毫秒)的時間 在經過1秒的延遲,執行一次
TimerTask中的方法。new TimerTask()就是寫一個類 然後繼承TimerTask,然後重寫其中的run()方法,在run()中放入自己想要執行的代碼。
夠清楚了吧?
③ java的timer類如何判斷程序超時呢
參照如下的:
Timer類是用來執行任務的類,它接受一個TimerTask做參數
TimerTask是個抽象類,他擴展了Object並實現了Runnable介面,因此你必須在自己的Task中實現publicvoid run()方法。這也就是我們需要執行的具體任務。
Timer有兩種執行任務的模式,最常用的是schele,它可以以兩種方式執行任務:1:在某個時間(Data),2:在某個固定的時間之後(intdelay).這兩種方式都可以指定任務執行的頻率
我們指定一個線程A,調用對象B.wait(timeout),線程A就會阻塞,直到timeout到了,B醒來會使A繼續執行。
其實Timer類是為多任務定時設計的,在實現裡面,B是一個任務隊列(實現上就是一個array),維護著所有使用當前Timer定時的任務,它們可是一堆貨真價實的線程實例。每次線程A都取隊列中距離當前時間最近的的定時任務,跟當前時間比較,然後wait(timeout)這段時間。線程喚醒的時刻也是隊列中這個定時任務運行的時刻。然後線程繼續取下一個定時任務,繼續wait(timeout)。從這里我們能看出來,每次定時都有額外的時間開銷,比如要維護隊列等,所以Java的Timer類不保證實時。
Timer中最主要由三個部分組成:
任務TimerTask 、 任務隊列: TaskQueue queue 和 任務調試者:TimerThreadthread
Timer對任務的調度是基於絕對時間的。
所有的TimerTask只有一個線程TimerThread來執行,因此同一時刻只有一個TimerTask在執行。
任何一個TimerTask的執行異常都會導致Timer終止所有任務。
由於基於絕對時間並且是單線程執行,因此在多個任務調度時,長時間執行的任務被執行後有可能導致短時間任務快速在短時間內被執行多次或者乾脆丟棄多個任務。
由於Timer/TimerTask有這些特點(缺陷),因此這就導致了需要一個更加完善的任務調度框架來解決這些問題。
默認情況下,只要一個程序的timer線程在運行,那麼這個程序就會保持運行。當然,你可以通過以下四種方法終止一個timer線程:
調用timer的cancle方法。你可以從程序的任何地方調用此方法,甚至在一個timertask的run方法里。
讓timer線程成為一個daemon線程(可以在創建timer時使用newTimer(true)達到這個目地),這樣當程序只有daemon線程的時候,它就會自動終止運行。
當timer相關的所有task執行完畢以後,刪除所有此timer對象的引用(置成null),這樣timer線程也會終止。
調用System.exit方法,使整個程序(所有線程)終止。
④ java timer類自動執行
javax.swing.Timer
在指定時間間隔觸發一個或多個 ActionEvent。一個示例用法是動畫對象,它將 Timer 用作繪制其幀的觸發器。
設置計時器的過程包括創建一個 Timer 對象,在該對象上注冊一個或多個動作偵聽器,以及使用 start 方法啟動該計時器。例如,以下代碼創建並啟動一個每秒(該時間由 Timer 構造方法的第一個參數指定)觸發一次動作事件的計時器。Timer 構造方法的第二個參數指定接收計時器動作事件的偵聽器。
int delay = 1000; //milliseconds
ActionListener taskPerformer = new ActionListener() {
public void actionPerformed(ActionEvent evt) {
//...Perform a task...
}
};
new Timer(delay, taskPerformer).start();構造 Timer 時要指定一個延遲參數和一個 ActionListener。延遲參數用於設置初始延遲和事件觸發之間的延遲(以毫秒為單位)。啟動了計時器後,它將在向已注冊偵聽器觸發第一個 ActionEvent 之前等待初始延遲。第一個事件之後,每次超過事件間延遲時它都繼續觸發事件,直到被停止。
構造之後,可以單獨更改初始延遲和事件間延遲,並且可以添加其他 ActionListener。
如果希望計時器只在第一次時觸發然後停止,可以對計時器調用 setRepeats(false)。
盡管所有 Timer 都使用一個共享線程(由第一個執行操作的 Timer 對象創建)執行等待,但是 Timer 的動作事件處理程序還會在其他線程(事件指派線程上)執行。這意味著 Timer 的操作處理程序可以安全地在 Swing 組件上執行操作。但是,它也意味著處理程序必須快速執行以保證 GUI 作出響應。
在 1.3 版本中,向 Java 平台添加了另一個 Timer 類:java.util.Timer。該類和 javax.swing.Timer 的基本功能相同,但是 java.util.Timer 更常用,功能更多。javax.swing.Timer 有兩個特徵,它們可以讓使用 GUI 更方便。首先,其事件處理程序都是 GUI 程序員所熟悉的,並且可以更簡單地處理事件指派線程。第二,其自動線程共享意味著不必採取特殊步驟來避免生成過多線程。相反,計時器使用同一個線程讓游標閃爍、使工具提示顯示等等。
new Timer().schele(new TimerTask(){
public void run() {
System.exit(0);
}}, 5000);
5秒後自動運行run里的內容,如果setRepeats(ture),5秒一個周期的自動運行。
⑤ Java中Timer的用法
這是方法1 你看可以么還有方法2 就是取兩個時間差(毫秒數) 得到結果
⑥ java 中timer類的用法是什麼
現在項目中用到需要定時去檢查文件是否更新的功能。timer正好用於此處。
用法很簡單,new一個timer,然後寫一個timertask的子類即可。
package comz.autoupdatefile;
import java.util.Timer;
import java.util.TimerTask;
public class M {
public static void main(String[] args) {
// TODO todo.generated by zoer
Timer timer = new Timer();
timer.schele(new MyTask(), 1000, 2000);
}
}
class MyTask extends TimerTask {
@Override
public void run() {
System.out.println("dddd");
}
}
這樣,就可以在1秒鍾之後開始執行mytask,每兩秒鍾執行一次。
當然,timer的功能也可以通過自己構造線程,然後在線程中用sleep來模擬停止一段時間,然後再執行某個動作。
其實,看一下timertask的源碼就立即可以知道,timertask就是實現了runnable介面的。也就是說,通過timer來間隔一段時間執行一個操作,也是通過一個線程來做到的。
⑦ java 定時器 timer
很簡單的一個程序,兩種實現方式,可以弄一個線程在一個while循環里一直跑,一次sleep一分鍾,判斷當前時間是否是你要的時間,如果是就觸發你的任務。
另外一種方法是,直接計劃三個任務,到時間它會自己執行:new Timer().schele(task, time);
⑧ java timer 用法
import java.util.Timer;
public class TimerTest1 {
static class MyTask extends java.util.TimerTask {
public void run() {
System.out.println("開始");
}
}
static class Shutdown extends java.util.TimerTask {
Timer timer = null;
public Shutdown() {
}
public Shutdown(Timer mytimer) {
timer = mytimer;
}
public void run() {
System.out.println("結束");
timer.cancel();// 使用這個方法退出任務
}
}
public static void main(String[] args) {
Timer timer = new Timer();
timer.schele(new MyTask(), 1000);// 在1秒後執行此任務
timer.schele(new Shutdown(timer), 3000);// 在3秒後執行此任務
}
}
⑨ java timer怎麼才配置具體的定時任務去調用方法去執行呢
TimerTask那定義一個變數 private static boolean going = false; 然後修改run方法 public void run() { if (going)return; going = true; //做你的事情 going = false; } 這個可以保證2秒執行一次,如果一次任務超過兩秒,下一次執行會在開始就結束。等待兩秒後再檢查 如果希望前一次任務若超過兩秒,後一次直接在前一次執行結束立即開始 可以換用Thread Thread t = new Thread(){ private static boolean going = true; public void run() { while(going){ int start = System.currentTimeMillis(); //做你的事 int cost = System.currentTimeMillis() - start; if (cost < 2000) { try{ sleep(2000 - cost); }catch(Exception ex){} } } } }; t.start();