A. 在java中如何實現較為精確的定時器
大部分人在遇到需要使用定時任務的時候首先會想到Timer類,
不過在JDK5.0之後就不建議使用這個專Timer了,因為它有很屬多的缺陷。
在新的java.util.concurrent包中的ScheledExecutorService可以替代這個Timer:
使用方法舉例:
Java代碼
ScheledThreadPoolExecutor exec = new ScheledThreadPoolExecutor(1);
exec.scheleAtFixedRate(new Runnable() {
public void run() {
try{
throw new RuntimeException();
}catch (Exception e){
System.out.println("RuntimeException catched");
}
}
}, 1000, 5000, TimeUnit.MILLISECONDS);
B. 求高手指點一二,我需要用java編寫一個定時器,每天8點開始執行,每一個小時執行一次,過了晚上12點停止
ScheledExecutorServiceservice=Executors.();
service.scheleAtFixedRate(newTimerTask(){
@Override
publicvoidrun(){
if(當前時間>8點){
dowork();//你要做的事
}
if(當前時間>12點){
this.cancel();
}
}
},0,1,TimeUnit.HOURS);
C. java中在定時器,定時每周一定時執行某個任務,必須在周一重新啟動了服務,該任務就會在指定的時間點執行
最常來用的做法是使用UNIX的cron直接執行源Java程序。
並不需要在Java做的那麼復雜。
Windows伺服器也有類似於cron的任務管理功能,同理
--------------------------->
Tomcat不是用來管理定時任務的,如果沒有HTTP請求,Servlet是不會被執行的。
建議lz把定期執行的處理做成一個獨立的Java程序,用cron執行。
如果不想寫獨立的Java程序,也可以用cron定期向Tomcat發送Http請求,但是,這樣做的話注意程序處理時間不能太長,因為HTTP通信有timeout的制約。
D. java定時線程佔用伺服器資源嗎
會占資源,但是不會占很多。就是開一個線程的開銷。它sleep的時候,會釋放cpu的
E. java定時器與線程的區別
javax.swing.Timer
盡管所有 Timer 都使用來一個共享線程源(由第一個執行操作的 Timer 對象創建)執行等待,但是 Timer 的動作事件處理程序還會在其他線程(事件指派線程上)執行。這意味著 Timer 的操作處理程序可以安全地在 Swing 組件上執行操作。但是,它也意味著處理程序必須快速執行以保證 GUI 作出響應。
java.util.Timer
一種工具,線程用其安排以後在後台線程中執行的任務。可安排任務執行一次,或者定期重復執行。
簡單理解,javax.swing.Timer沒有增加線程,利用事件線程的間隙運行,java.util.Timer增加線程了。
F. java寫一個定時器,定時對一個變數賦不同值,這個程序代碼怎麼寫
比較復雜點的需要Quartz,引入jar包,然後再需要配置一些東西,詳細參考如下。
http://..com/question/382322468.html
簡單點的直接可以這樣內寫容
while(true){
xxx//作時間間隔判斷,或者當前時間與上一執行時間間隔。
i=j;//i 是你變數,j是動態的值
}
G. java定時器用什麼實現
java定時器的使用()
1、在應用開發中,經常需要一些周期性的操作,比如每5分鍾執行某一操作等。
對於這樣的操作最方便、高效的實現方式就是使用java.util.Timer工具類。
private java.util.Timer timer;
timer = new Timer(true);
timer.schele(
new java.util.TimerTask() { public void run()
{ //server.checkNewMail(); 要操作的方法} }, 0, 5*60*1000);
第一個參數是要操作的方法,第二個參數是要設定延遲的時間,第三個參
數是周期的設定,每隔多長時間執行該操作。
使用這幾行代碼之後,Timer本身會每隔5分鍾調用一遍
server.checkNewMail()方法,不需要自己啟動線程。Timer本身也是多線程同
步的,多個線程可以共用一個Timer,不需要外部的同步代碼。
2、
(1)Timer.schele(TimerTask task,Date time)安排在制定的時間執行指定的
任務。
(2)Timer.schele(TimerTask task,Date firstTime ,long period)安排指定
的任務在指定的時間開始進行重復的固定延遲執行.
(3)Timer.schele(TimerTask task,long delay)安排在指定延遲後執行指定的
任務.
(4)Timer.schele(TimerTask task,long delay,long period)安排指定的任務
從指定的延遲後開始進行重復的固定延遲執行.
(5)Timer.scheleAtFixedRate(TimerTask task,Date firstTime,long period)
安排指定的任務在指定的時間開始進行重復的固定速率執行.
(6)Timer.scheleAtFixedRate(TimerTask task,long delay,long period)安
排指定的任務在指定的延遲後開始進行重復的固定速率執行.
用Java Timer API 進行時間調度開發的相關注意點
java.util這個包中可以找到Timer和TimerTask這兩個類。Timer直接從Object
繼承,它相當於一個計時器,能夠用它來指定某個時間來執行一項任務,或者
每隔一定時間間隔反復執行同一個任務。創建一個Timer後,就會生成一個線程
在背後運行,來控制任務的執行。而TimerTask就是用來實現某項任務的類,
它實現了Runnable介面,因此相當於一個線程。