JAVA TIMER簡略用法進修。本站提示廣大學習愛好者:(JAVA TIMER簡略用法進修)文章只能為提供參考,不一定能成為您想要的結果。以下是JAVA TIMER簡略用法進修正文
Timer有兩種履行義務的形式,最經常使用的是schedule,它可以以兩種方法履行義務:1:在某個時光(Data),2:在某個固定的時光以後(int delay).這兩種方法都可以指定義務履行的頻率.看個簡略的例子:
import java.io.IOException;
import java.util.Timer;
public class TimerTest {
public static void main(String[] args){
Timer timer = new Timer();
timer.schedule(new MyTask(), 1000, 2000);//在1秒後履行此義務,每次距離2秒,假如傳遞一個Data參數,便可以在某個固定的時光履行這個義務.
while(true){//這個是用來停滯此義務的,不然就一向輪回履行此義務了
try {
int ch = System.in.read();
if(ch-'c'==0){
timer.cancel();//應用這個辦法加入義務
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
static class MyTask extends java.util.TimerTask{
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println("________");
}
}
}
假如你應用的是JDK 5+,還有一個scheduleAtFixedRate模 式可以用,在這個形式下,Timer會盡可能的讓義務在一個固定的頻率下運轉,舉例解釋:在下面的例子中,我們想讓MyTask在1秒鐘後,每兩秒鐘履行一 次,然則由於java不是及時的(其實java及時性很差.....),所以,我們在上個法式中表達的原義其實不可以或許嚴厲履行.假如我們挪用的是 scheduleAtFixedRate,那末,Timer會盡可能讓你的Task履行的頻率堅持在2秒一次.運轉下面的法式,假定應用的是 scheduleAtFixedRate,那末上面的場景就是能夠的:1秒鐘後,MyTask 履行一次,由於體系忙碌,以後的2.5秒後MyTask 才得以履行第二次,然後,Timer記下了這個延遲,並測驗考試鄙人一個義務的時刻填補這個延遲,那末,1.5秒後,MyTask 將履行的三次."以固定的頻率而不是固定的延遲時光去履行一個義務"
上面給出一個龐雜點的例子,個中告知年夜家怎樣加入單個TimerTask,怎樣加入一切Task
package MyTimerTest;
import java.io.IOException;
import java.util.Timer;
/*
* 本類給出了應用Timer和TimerTaske的重要辦法,個中包含定制義務,添加義務
* 加入義務,加入准時器.
* 由於TimerTask的status域是包級可拜訪的,所以沒有方法在java.util.包外
* 獲得其狀況,這對編程形成一些未便 .我們不克不及斷定某個Task的狀況了.
*
*/
public class TimerTest {
public static void main(String[] args) {
Timer timer = new Timer();
MyTask myTask1 = new MyTask();
MyTask myTask2 = new MyTask();
myTask2.setInfo("myTask-2");
timer.schedule(myTask1, 1000, 2000);
timer.scheduleAtFixedRate(myTask2, 2000, 3000);
while (true) {
try {
byte[] info = new byte[1024];
int len = System.in.read(info);
String strInfo = new String(info, 0, len, "GBK");//從掌握台讀出信息
if (strInfo.charAt(strInfo.length() - 1) == ' ') {
strInfo = strInfo.substring(0, strInfo.length() - 2);
}
if (strInfo.startsWith("Cancel-1")) { myTask1.cancel();//加入單個義務
// 其實應當在這裡斷定myTask2能否也加入了,是的話就應當break.然則由於沒法在包外獲得
// myTask2的狀況,所以,這裡不克不及做出能否加入輪回的斷定.
} else if (strInfo.startsWith("Cancel-2")) {
myTask2.cancel();
} else if (strInfo.startsWith("Cancel-All")) {
timer.cancel();//加入Timer
break;
} else {
// 只對myTask1作出斷定,偷個懶^_^
myTask1.setInfo(strInfo);
}
} catch (IOException e) { // TODO Auto-generated catch block
e.printStackTrace();
}
}
}
static class MyTask extends java.util.TimerTask {
String info = "^_^";
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println(info);
}
public String getInfo() {
return info;
}
public void setInfo(String info) {
this.info = info;
}
}
}