熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> JSP教程 >> 正文

JAVA TIMER簡單用法學習

2013-11-15 12:07:49  來源: JSP教程 

  Timer有兩種執行任務的模式最常用的是schedule它可以以兩種方式執行任務::在某個時間(Data):在某個固定的時間之後(int delay)這兩種方式都可以指定任務執行的頻率看個簡單的例子:

復制代碼 代碼如下:
import javaioIOException;
import javautilTimer;

  public class TimerTest {

public static void main(String[] args){
Timer timer = new Timer();
timerschedule(new MyTask() );//在秒後執行此任務每次間隔如果傳遞一個Data參數就可以在某個固定的時間執行這個任務
while(true){//這個是用來停止此任務的否則就一直循環執行此任務了
try {
int ch = Systeminread();
if(chc==){
timercancel();//使用這個方法退出任務

}
} catch (IOException e) {
// TODO Autogenerated catch block
eprintStackTrace();
}
}
}


static class MyTask extends javautilTimerTask{
@Override
public void run() {
// TODO Autogenerated method stub
Systemoutprintln("________");
}
}
}

  如果你使用的是JDK +還有一個scheduleAtFixedRate模 式可以用在這個模式下Timer會盡量的讓任務在一個固定的頻率下運行舉例說明:在上面的例子中我們想讓MyTask在秒鐘後每兩秒鐘執行一 次但是因為java不是實時的(其實java實時性很差)所以我們在上個程序中表達的原義並不能夠嚴格執行如果我們調用的是 scheduleAtFixedRate那麼Timer會盡量讓你的Task執行的頻率保持在秒一次運行上面的程序假設使用的是 scheduleAtFixedRate那麼下面的場景就是可能的:秒鐘後MyTask 執行一次因為系統繁忙之後的秒後MyTask 才得以執行第二次然後Timer記下了這個延遲並嘗試在下一個任務的時候彌補這個延遲那麼秒後MyTask 將執行的三次"以固定的頻率而不是固定的延遲時間去執行一個任務"

  下面給出一個復雜點的例子其中告訴大家怎麼退出單個TimerTask怎麼退出所有Task

復制代碼 代碼如下:
package MyTimerTest;

  import javaioIOException;
import javautilTimer;
/*
* 本類給出了使用Timer和TimerTaske的主要方法其中包括定制任務添加任務
* 退出任務退出定時器
* 因為TimerTask的status域是包級可訪問的所以沒有辦法在javautil包外
* 得到其狀態這對編程造成一些不便 我們不能判斷某個Task的狀態了
*
*/

  public class TimerTest {

  public static void main(String[] args) {
Timer timer = new Timer();
MyTask myTask = new MyTask();
MyTask myTask = new MyTask();
myTasksetInfo("myTask");
timerschedule(myTask );
timerscheduleAtFixedRate(myTask );
while (true) {
try {

  
byte[] info = new byte[];
int len = Systeminread(info);
String strInfo = new String(info len "GBK");//從控制台讀出信息
if (strInfocharAt(strInfolength() ) == ) {
strInfo = strInfosubstring( strInfolength() );
}
if (strInfostartsWith("Cancel")) { myTaskcancel();//退出單個任務
// 其實應該在這裡判斷myTask是否也退出了是的話就應該break但是因為無法在包外得到
// myTask的狀態所以這裡不能做出是否退出循環的判斷
} else if (strInfostartsWith("Cancel")) {
myTaskcancel();
} else if (strInfostartsWith("CancelAll")) {
timercancel();//退出Timer
break;
} else {
// 只對myTask作出判斷偷個懶^_^
myTasksetInfo(strInfo);
}
} catch (IOException e) { // TODO Autogenerated catch block
eprintStackTrace();
}
}
}

  static class MyTask extends javautilTimerTask {
String info = "^_^";

  @Override
public void run() {

  
// TODO Autogenerated method stub
Systemoutprintln(info);
}
public String getInfo() {
return info;
}

  public void setInfo(String info) {

  
thisinfo = info;
}

  }


From:http://tw.wingwit.com/Article/program/Java/JSP/201311/20359.html
  • 上一篇文章:

  • 下一篇文章:
  • 推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.