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

java的timer類

發布時間:2022-06-28 07:24:56

1. 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秒一個周期的自動運行。

2. Java中Timer類的schele方法開始計時時間是不是創建timer對象的時刻

通過查看JDK源碼可以知道如下:
public
void
schele(TimerTask
task,
long
delay)
{
if
(delay
<
0)
throw
new
IllegalArgumentException("Negative
delay.");
sched(task,
System.currentTimeMillis()+delay,
0);
}
實際上調用的是如下方法:
private
void
sched(TimerTask
task,
long
time,
long
period)
//task:安排的任務,the
scheled
task;
//time:指定的時間去執行
*
at
the
specified
time
with
the
specified
period,
in
milliseconds.
//period:如果period是正數,則會重復執行任務,如果是零則只執行任務一次
If
period
is
*
positive,
the
task
is
scheled
for
repeated
execution;
*
zero,
the
task
is
scheled
for
one-time
execution.
因此可以分析到
中間書寫的語句不會算在延遲時間中,程序的開始時刻就是執行到timer.schele(new
Task(),1000);//語句時,開始計時。而Timer
timer
=
new
Timer()
只是創建了一個Timer類對象。
只有程序執行到timer.schele(new
Task(),1000)時,才會調用
sched(task,
System.currentTimeMillis()+delay,
0)方法,而這時該方法
才去執行System.currentTimeMillis取得當前時間,並將該任務加到TaskQueue隊列中
(自帶任務隊列),經過System.currentTimeMillis+1000毫秒後根據指定狀態執行指定任務.

3. java 通過查詢Timer類的方法,解決以下問題:

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.Timer;
import java.util.Calendar;
import java.util.Date;
public class SwingTimerDemo{

static boolean bStop = false;

void init(){

int delay = 10000; //milliseconds, 10seconds
ActionListener taskPerformer = new ActionListener() {
public void actionPerformed(ActionEvent evt) {
Calendar calendar1 = Calendar.getInstance();
calendar1.set(Calendar.DATE, calendar1.getActualMaximum(Calendar.DATE));
int month1 = calendar1.get(Calendar.DAY_OF_MONTH);

Calendar calendar2 = Calendar.getInstance();
calendar2.setTime(new Date());
int month2 = calendar2.get(Calendar.DAY_OF_MONTH);
int hour2 = calendar2.get(Calendar.HOUR_OF_DAY);
if(month1==month2 && hour2==17){
doSomething();
}
}
};
new Timer(delay, taskPerformer).start();
}

void doSomething(){
System.out.println("Timer .............");
}

public static void main(String argv[])throws Exception{
new SwingTimerDemo().init();
System.out.println("Timer started .............");
while(!bStop){
Thread.sleep(1000);
}
}

}

請參考,完整代碼。

4. 求問java中的Timer類是一個線程嗎

在 Java 2 SDK, Standard Edition, Version 1.3 中引入這個框架之前,開發人員必須編寫自己的調度程序,這需要花費很大精力來處理線程和復雜的 Object.wait() 方法。不過,Java 計時器框架沒有足夠的能力來滿足許多應用程序的計劃要求。甚至一項需要在每天同一時間重復執行的任務,也不能直接使用 Timer 來計劃,因為在夏令時開始和結束時會出現時間跳躍。
本文展示了一個通用的 Timer 和 TimerTask 計劃框架,從而允許更靈活的計劃任務。這個框架非常簡單 ? 它包括兩個類和一個介面 ? 並且容易掌握。如果您習慣於使用 Java 定時器框架,那麼您應該可以很快地掌握這個計劃框架。
計劃單次任務
想像一個煮蛋計時器,在數分鍾之後(這時蛋煮好了)它會發出聲音提醒您。清單 1 中的代碼構成了一個簡單的煮蛋計時器的基本結構,它用 Java 語言編寫:
清單1. EggTimer 類 package org.tiling.scheling.examples;
import java.util.Timer;
import java.util.TimerTask;
public class EggTimer {
private final Timer timer = new Timer();
private final int minutes;
public EggTimer(int minutes) {
this.minutes = minutes;}public void start() {
timer.schele(new TimerTask() {
public void run() {
playSound();
timer.cancel();}private void playSound() {
System.out.println("Your egg is ready!");
// Start a new thread to play a sound...}
}, minutes * 60 * 1000);}public static void main(String[] args) {
eggTimer.start();}}EggTimer 實例擁有一個 Timer 實例,用於提供必要的計劃。用 start() 方法啟動煮蛋計時器後,它就計劃了一個 TimerTask,在指定的分鍾數之後執行。時間到了,Timer 就在後台調用 TimerTask 的 start() 方法,這會使它發出聲音。在取消計時器後這個應用程序就會中止。

5. 在JAVA中的定時器Timer類,有句話如下,它是什麼意思。

這里的容器是指運行你的應用程序的環境,比如你是一個servlet,一個websevice服務等託管與Tomcat、Jboss、WebLogic、Websphere這樣的伺服器中運行,那麼Tomcat、Jboss、Weblogic、Websphere就叫做容器。
因為線程由部署在容器中的應用負責,所以如果應用程序線程式控制制不力,那麼可能會導致內存泄露,或者導致容器崩掉。
也就類似於:
容器是賓館,每個房間給每個人住,每個人就是部署在其中的服務。一個人房間點火,如果火候控制不利,整個賓館可能被燒掉,因為賓館這個容器無法控制人的點火行為。所以不推薦使用。

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

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

8. 關於JAVA的定時類 Timer的問題

可以參考如下:
假定你的定時器是在每一月最後一天的0點執行
那麼修改定時器,在每一天的0點執行

執行的過程不是直接調用真實的功能實現,而是先判斷當天是否為當月的最後一天,這個不難吧,取得當前年,取得當前月,取得當前日,判斷是否閏年等等

如果是當月最後一天,調用實際定時器功能實現,如果不是,退出,繼續定時

9. 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秒一個周期的自動運行。

10. java中有timer類嗎

有的
Timer timer = new Timer();
timer.schele(new MyTask(), 1000, 2000);

閱讀全文

與java的timer類相關的資料

熱點內容
不去互聯網程序員 瀏覽:550
電腦qq郵箱解壓的圖片保存在哪裡 瀏覽:544
嵌入命令行 瀏覽:91
檔案為什麼被加密 瀏覽:486
十天學會單片機13 瀏覽:875
榮耀怎麼設置讓app一直運行 瀏覽:993
共享文件夾能在哪裡找到 瀏覽:435
旅遊訂旅店用什麼app 瀏覽:240
一個女程序員的聲音 瀏覽:496
魔術app怎麼用 瀏覽:340
單片機有4個8位的io口 瀏覽:897
win10rar解壓縮軟體 瀏覽:169
plc教程pdf 瀏覽:668
pythonshell清屏命令 瀏覽:279
檢測到加密狗注冊伺服器失敗 瀏覽:205
解壓後手機如何安裝 瀏覽:519
極客學院app為什麼下架 瀏覽:14
圖片批量壓縮綠色版 瀏覽:656
東北程序員帥哥 瀏覽:709
加密封條風噪小 瀏覽:975