導航:首頁 > 編程語言 > java中timer

java中timer

發布時間:2022-08-22 04:30:40

1. 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方法,使整個程序(所有線程)終止。

2. 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秒後執行此任務
}

}

3. 怎麼用java中的timer做出延遲效果

new Thread(new Runnable() {
public void run() {
while(true) {
repaint();
Thread.sleep(500);
}
}
}).start();
這樣就沒錯誤了。

要用延遲的話,不妨試試java.util.Timer().
new java.util.Timer().schele(new TimerTask(){
public void run() {
//這里寫延遲後要運行的代碼
repaint();
//如果只要這個延遲一次,用cancel方法取消掉.
this.cancel();

}}, 3000);
//參考參考java幫助文擋,也可以以固定間隔連續執行.
復制別人的過來的,望採納

4. 什麼是JavaTimer類如何創建一個有特定時間間隔的任務

java.util.Timer是一個工具類,可以用於安排一個線程在未來的某個特定時間執行。Timer類可以用安排一次性任務或者周期任務。
java.util.TimerTask是一個實現了Runnable介面的抽象類,需要去繼承這個類來創建自己的定時任務並使用Timer去安排它的執行。

5. 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來間隔一段時間執行一個操作,也是通過一個線程來做到的。

6. java 中定時器timer是被什麼觸發的

java中有個定時任務java.util.TimerTask用法很簡單class MyTask extends java.util.TimerTask{@Overridepublic void run() {// 這個任何所執行的代碼}}java.util.Timer timer = new Timer(true);//treu就是守護線程MyTask task = new MyTask();//開始執行任務,第一個參數是任務,第二個是延遲時間,第三個是每隔多長時間執行一次timer.schele(task, 0 , 1000 * 60 * 60 * 24);

7. java timer(2000,this)什麼意思

首先:用到需要定時去檢查文件是否更新的功能
eg.
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來間隔一段時間執行一個操作,也是通過一個線程來做到的。

8. java定時器怎麼停止

1、scheleUpdate
加入當前節點後,程序會每幀都會自動執行一次默認的Update函數。(註:一定是Update函數哦,若想調用其他自己命名的函數則使用schele)
看例子,走起。
首先在HelloWord類的頭文件中聲明Update函數:
[cpp] view plain print?
void update(float dt); //注意參數類型
然後在HelloWorld類源文件中實現函數Update:

[cpp] view plain print?
void HelloWorld::update(float dt)
{
CCLOG("");
}
現在我們可以調用了,在需要他不斷執行的地方加入調用的代碼就ok:

[cpp] view plain print?
this->scheleUpdate(); //this是當前節點,如layer,所以可以省略啦。

運行之後你將會看到不斷有被列印出來
2、scheleUpdate
可以沒隔幾秒執行某個自定義的函數,來看代碼:
首先還是在HelloWorld中聲明所要執行的函數:

9. 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()中放入自己想要執行的代碼。
夠清楚了吧?

10. java關於Timer計時器的問題求解

timer內部有TimerTask。TimerTask可以取消cancel()。取消了,但是還在timer內部。
timer.purge()移除取消了的任務。
所以
最好
cancel
之後調用
purge
然後
置空timer
timer
=null;
不調用timer.cancel(),timerTask線程會一直被執行,
調用timer.cancel(),timerTask也會執行完當次之後結束。
最好
if(timer!=null){
timer.cancel();
timer.purge();
timer=null;
}

閱讀全文

與java中timer相關的資料

熱點內容
pdf手寫筆 瀏覽:173
別永遠傷在童年pdf 瀏覽:984
愛上北斗星男友在哪個app上看 瀏覽:414
主力散戶派發源碼 瀏覽:665
linux如何修復伺服器時間 瀏覽:55
榮縣優途網約車app叫什麼 瀏覽:473
百姓網app截圖是什麼意思 瀏覽:222
php如何嵌入html 瀏覽:811
解壓專家怎麼傳輸 瀏覽:743
如何共享伺服器的網路連接 瀏覽:132
程序員簡易表白代碼 瀏覽:167
什麼是無線加密狗 瀏覽:63
國家反詐中心app為什麼會彈出 瀏覽:68
cad壓縮圖列印 瀏覽:102
網頁打開速度與伺服器有什麼關系 瀏覽:863
android開發技術文檔 瀏覽:65
32單片機寫程序 瀏覽:52
三星雙清無命令 瀏覽:839
漢壽小程序源碼 瀏覽:345
易助erp雲伺服器 瀏覽:533