javaschedule
⑴ java scheler指的是什麼
首先
class A extends TimerTask
A要實現run方法
其次
java.util.Timer timer=new java.util.Timer();
A a=new A();
timer.schele(a, 0, 1000);
0是延遲多少時間觸發
1000是這個schele的時間間隔
這里時間單位都是毫秒
這樣的話就是1秒執行一次a.run()
⑵ 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毫秒後根據指定狀態執行指定任務.
⑶ java schele如何實現每月執行一次
linux系統下用cron可以實現每月執行一次某程序。
⑷ Java有沒有辦法做精確的Job Schele
java中設置定時任務用Timer類可以實現。
一、延時執行
首先,我們定義一個類,給它取個名字叫TimeTask,我們的定時任務,就在這個類的main函數里執行。代碼如下:
package test;
import java.util.Timer;
public class TimeTask {
public static void main(String[] args){
Timer timer = new Timer();
timer.schele(new Task(), 60 * 1000);
}
}
解釋一下上面的代碼。
上面的代碼實現了這樣一個功能,當TimeTask程序啟動以後,過一分鍾後執行某項任務。很簡單吧:先new一個Timer對象,然後調用它的schele方法,這個方法有四個重載的方法,這里我們用其中一個,
public void schele(TimerTask task,long delay)
首先,第一個參數
第一個參數就是我們要執行的任務。
這是一個TimerTask對象,確切點說是一個實現TimerTask的類的對象,因為TimerTask是個抽象類。上面的代碼裡面,Task就是我們自己定義的實現了TimerTask的類,因為是在同一個包裡面,所以沒有顯性的import進來。Task類的代碼如下
package test;
import java.util.TimerTask;
public class Task extends TimerTask {
public void run(){
System.out.println("定時任務執行");
}
}
我們的Task必須實現TimerTask的方法run,要執行的任務就在這個run方法裡面,這里,我們只讓它往控制台打一行字。
第二個參數
第二個參數是一個long型的值。這是延遲的時間,就是從程序開始以後,再過多少時間來執行定時任務。這個long型的值是毫秒數,所以前面我們的程序裡面,過一分鍾後執行用的參數值就是 60 * 1000。
二、循環執行
設置定時任務的時候,往往我們需要重復的執行這樣任務,每隔一段時間執行一次,而上面的方法是只執行一次的,這樣就用到了schele方法的是另一個重載函數
public void schele(TimerTask task,long delay,long period)
前兩個參數就不用說什麼了,最後一個參數就是間隔的時間,又是個long型的毫秒數(看來java里涉及到時間的,跟這個long是脫不了干係了),比如我們希望上面的任務從第一次執行後,每個一分鍾執行一次,第三個參數值賦60 * 1000就ok了。
三、指定執行時間
既然號稱是定時任務,我們肯定希望由我們來指定任務指定的時間,顯然上面的方法就不中用了,因為我們不知道程序什麼時間開始運行,就沒辦法確定需要延時多少。沒關系,schele四個重載的方法還沒用完呢。用下面這個就OK了:
public void schele(TimerTask task,Date time)
比如,我們希望定時任務2006年7月2日0時0分執行,只要給第二個參數傳一個時間設置為2006年7月2日0時0分的Date對象就可以了。
有一種情況是,可能我們的程序啟動的時候,已經是2006年7月3日了,這樣的話,程序一啟動,定時任務就開始執行了。
schele最後一個重載的方法是
public void schele(TimerTask task,Date firstTime,long period)
⑸ 簡單理解java中timer的schele和scheleAtFixedRate方法的區別
根據你設定的時間,如果當前時間超過你的設定時間,schele會立即執行一次,並按間隔到下次執行,而之前你設定時間到當前時間可能會有多次,不會執行;scheleAtFixedRate相反,它會把之前沒執行的都執行一次。
⑹ Java-java怎麼再次設置Timer的schele
需要先將Time
cancel掉,再重建一個Time執行。例如:
public
class
TimerTest
{
public
static
void
main(String[]
args){
Timer
timer
=
new
Timer();
timer.schele(new
MyTask(),
1000,
2000);//在1秒後執行此任務,每次間隔2秒,如果傳遞一個Data參數,就可以在某個固定的時間執行這個任務.
while(true){//這個是用來停止此任務的,否則就一直循環執行此任務了
try
{
int
ch
=
System.in.read();
if(ch-'c'==0){
timer.cancel();//使用這個方法退出任務
}
}
catch
(IOException
e)
{
e.printStackTrace();
}
}
}
static
class
MyTask
extends
java.util.TimerTask{
@Override
public
void
run()
{
//
TODO
Auto-generated
method
stub
System.out.println("________");
}
}
}
⑺ java 怎麼寫定時任務
如果要執行一些簡單的定時器任務,無須做復雜的控制,也無須保存狀態,那麼可以考慮使用JDK 入門級的定期器Timer來執行重復任務。
一、原理
JDK中,定時器任務的執行需要兩個基本的類:
java.util.Timer;
java.util.TimerTask;
要運行一個定時任務,最基本的步驟如下:
1、建立一個要執行的任務TimerTask。
2、創建一個Timer實例,通過Timer提供的schele()方法,將 TimerTask加入到定時器Timer中,同時設置執行的規則即可。
當程序執行了Timer初始化代碼後,Timer定時任務就會按照設置去執行。
Timer中的schele()方法是有多種重載格式的,以適應不同的情況。該方法的格式如下:
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)
安排指定的任務從指定的延遲後開始進行重復的固定延遲執行。
Timer是線程安全的,此類可擴展到大量同時安排的任務(存在數千個都沒有問題)。其所有構造方法都啟動計時器線程。可以調用cancel() 終止此計時器,丟棄所有當前已安排的任務。purge()從此計時器的任務隊列中移除所有已取消的任務。此類不提供實時保證:它使用 Object.wait(long) 方法來安排任務。
TimerTask是一個抽象類,由 Timer 安排為一次執行或重復執行的任務。它有一個抽象方法run()----計時器任務要執行的操作。因此,每個具體的任務類都必須繼承TimerTask類,並且重寫run()方法。另外它還有兩個非抽象的方法:
boolean cancel()
取消此計時器任務。
long scheledExecutionTime()
返回此任務最近實際 執行的安排 執行時間。
二、例子
下面用Timer實現一個簡單例子:
package stu.timer;
import java.util.Date;
import java.util.TimerTask;
/**
* 重復執行的任務
*
* @author leimin,2008-10-9 9:20:20
*/
public class TestTimerTask extends TimerTask {
/**
* 此計時器任務要執行的操作。
*/
public void run() {
Date executeTime = new Date(this.scheledExecutionTime());
System.out.println("本次任務執行的時間是" + executeTime);
}
}
package stu.timer;
import java.util.Timer;
import java.util.TimerTask;
/**
* 測試JDK Timer的執行
*
* @author leimin,2008-10-9 9:24:35
*/
public class TestTimer {
public static void main(String[] args) {
Timer timer = new Timer();
TimerTask task = new TestTimerTask();
timer.schele(task, 500L, 1000L);
}
}
運行結果:
本次任務執行的時間是Thu Oct 09 09:47:57 CST 2008
本次任務執行的時間是Thu Oct 09 09:47:58 CST 2008
本次任務執行的時間是Thu Oct 09 09:47:59 CST 2008
本次任務執行的時間是Thu Oct 09 09:48:00 CST 2008
本次任務執行的時間是Thu Oct 09 09:48:01 CST 2008
本次任務執行的時間是Thu Oct 09 09:48:02 CST 2008
本次任務執行的時間是Thu Oct 09 09:48:03 CST 2008
本次任務執行的時間是Thu Oct 09 09:48:04 CST 2008
本次任務執行的時間是Thu Oct 09 09:48:05 CST 2008
......
⑻ Java中使用Timer的schele方法設定程序定點執行問題
time.schele方法第二個參數可以是指延遲多少毫秒開始執行,也可以是一個Date,第三個參數指每隔多少毫秒執行一次task.run
這樣你可以懂了吧,先new Date()
設定時間為17:00:00
或者計算出與17:00:00間隔多少毫秒
第三個參數指定了間隔多少時間運行一次,24*3600*1000就是每天運行一次
⑼ java Timer的schele和scheleAtFixedRate方法的區別
void
schele(TimerTask task,
Date time)
Scheles the specified task for execution at the specified time.
void
schele(TimerTask task, Date firstTime, long period)
Scheles the specified task for repeated fixed-delay execution,
beginning at the specified time.
void
schele(TimerTask task, long delay)
Scheles the specified task for execution after the specified delay.
void
schele(TimerTask task,
long delay, long period)
Scheles the specified task for repeated fixed-delay execution,
beginning after the specified delay.
void
scheleAtFixedRate(TimerTask task,
Date firstTime, long period)
Scheles the specified task for repeated fixed-rate execution,
beginning at the specified time.
void
scheleAtFixedRate(TimerTask task,
long delay, long period)
Scheles the specified task for repeated fixed-rate execution,
beginning after the specified delay.
參數中
delay參數是延時,就是延時多少毫秒後開始。
period 是周期,就是隔多少毫秒後,再執行下一次
time 就是執行的時間,不循環
firstTime 就是首次執行的時間
schele 會等本次執行完畢、再下一次
scheleAtFixedRate 就是不管上一次有沒有執行完畢,都繼續本次、也會按原定時間,執行下一次。。。。。。。。。。
⑽ java Timer中schele()的用法的問題
這是方法1
你看可以么
還有方法2
就是取兩個時間差(毫秒數)
得到結果