- 相關(guān)推薦
關(guān)于TimerTask與Timer類(lèi)的應用
Timer類(lèi)就像一個(gè)定時(shí)器,用于設置特定的時(shí)間或周期,來(lái)配合線(xiàn)程動(dòng)作的執行,但是只調用Timer無(wú)法執行線(xiàn)程動(dòng)作,必須配合另一個(gè)類(lèi)TimerTask的方法才能使用。從示例6-13中可以發(fā)現Timer類(lèi)與Thread類(lèi)很相近。
public Timer ()
創(chuàng )建一個(gè)新的timer對象。
Timer屬于計時(shí)器類(lèi),Time建立后,需要調用schedule()方法來(lái)執行計劃任務(wù),計劃調度的方法有許多運用方式:
public void schedule (TimerTask task, long delay)
執行任務(wù)前先等待一段時(shí)間。task代表要執行的任務(wù),delay代表需要等待的時(shí)間,單位為毫秒(1000毫秒為1秒)。
public void schedule (TimerTask task,
Date time)
在指定的系統時(shí)間time之后開(kāi)始執行任務(wù)。
public void schedule (TimerTask task,
long delay,
long period)
延遲一段時(shí)間后開(kāi)始執行任務(wù),任務(wù)按照設定的周期執行。傳入的參數:delay為延遲時(shí)間,period為周期時(shí)間,單位均為毫秒。
public void schedule(TimerTask task,
Date firstTime,
long period)
在指定的時(shí)間后開(kāi)始執行任務(wù),任務(wù)按照設定的周期執行。傳入的參數:firstTime為指定等待時(shí)間,period為周期時(shí)間,單位都是毫秒。
public void scheduleAtFixedRate (TimerTask task,
long delay,
long period)
執行任務(wù)內容后,等待delay時(shí)間,再按照period周期時(shí)間繼續執行任務(wù),單位都是毫秒。
public void scheduleAtFixedRate
(TimerTask task,
Date firstTime,
long period)
先等待一段時(shí)間firstTime,再執行計劃任務(wù),然后按照period周期時(shí)間繼續執行任務(wù),單位都是毫秒。
public void cancel()
停止timer計時(shí)。
有了Timer的各項調用方法,還不能直接執行計劃任務(wù),需要跟TimerTask類(lèi)共同運用才能使計劃任務(wù)開(kāi)始運行。TimerTask所包含的相關(guān)方法如下:
public void TimerTask ()
創(chuàng )建一個(gè)新的TimerTask對象。
public abstract void run()
運行計劃任務(wù)的工作內容。
public void cancel()
中止TimerTask類(lèi)的執行流程,不再執行所調度的工作內容。
public void scheduleExcutionTime()
實(shí)際運行計劃任務(wù)所用的時(shí)間。
示例6-13
/×
Timer和TimerTask類(lèi)運行計劃任務(wù)
×/
import javax.microedition.midlet.×;
import javax.microedition.lcdui.×;
import java.util.×;
public class threadDemo3 extends MIDlet
{
Display display;
canvasThread canvasthread;
public threadDemo3()
{
canvasthread=new canvasThread();
display=Display.getDisplay(this);
}
public void startApp()
{
display.setCurrent(canvasthread);
}
public void pauseApp(){}
public void destroyApp(boolean unconditional){}
public class canvasThread extends Canvas
{
int gameaction=0;
int view=0;
boolean again;
//聲明一個(gè)Tim er類(lèi)
Timer timers;
Image[] cloudImage;
Image[] sunImage;
public canvasThread()
{
timers=new Timer();
try{
cloudImage = new Image[]{
Image.createImage("/cloud-1.png"),
Image.createImage("/cloud-2.png"),
Image.createImage("/cloud-3.png"),
Image.createImage("/cloud-4.png")
};
sunImage = new Image[]{
Image.createImage("/sun-1.png"),
Image.createImage("/sun-2.png"),
Image.createImage("/sun-3.png"),
Image.createImage("/sun-4.png")
};
}catch(Exception ex){}
}
public void keyPressed(int keyCode)
{
gameaction=getGameAction(keyCode);
switch(gameaction)
{
case FIRE:
//運行計劃任務(wù)
actionView();
break;
}
}
public void paint(Graphics g)
{
g.setColor(0xFFFFFF);
g.fillRect(0, 0, getWidth(), getHeight());
g.setColor(0);
g.drawString("Timer線(xiàn)程動(dòng)畫(huà)應用", getWidth()/2, 20,
Graphics.HCENTER | Graphics.TOP);
g.drawImage(sunImage[view], getWidth()/2, 50, Graphics.HCENTER |
Graphics.TOP);
g.drawImage(cloudImage[view], getWidth()/2, 50, Graphics.HCENTER
| Graphics.TOP);
}
private void actionView()
{
/×
安排一個(gè)計劃任務(wù)
運行任務(wù)內容:goCanvas()
delay時(shí)間:500毫秒
period周期:500毫秒
×/
timers.schedule(new goCanvas(), 500, 500);
}
//計劃任務(wù)程序內容
class goCanvas extends TimerTask
{
public void run()
{
repaint();
if(again)
view--;
else
view++;
if(again && view==0)
again=false;
if(!again && view==3)
again=true;
}
}
}
}
【說(shuō)明】本線(xiàn)程使用計劃任務(wù)進(jìn)行,所達到的效果跟使用線(xiàn)程的方式是相同的。只是在計劃的內容上有所不同,例如不需要sleep()暫停時(shí)間,而是由schedule控制暫停時(shí)間。
【TimerTask與Timer類(lèi)的應用】相關(guān)文章:
小學(xué)雞兔同籠類(lèi)應用題03-31
英語(yǔ)四級應用類(lèi)作文寫(xiě)作技巧03-30
2016小升初數學(xué)?嫉4類(lèi)應用題01-23
2016考研英語(yǔ):攻克高分作文之告示類(lèi)應用文03-19
2017中職類(lèi)計算機應用基礎試題「附答案」03-06
速錄介紹及應用03-05
EDA技術(shù)與應用03-31
草坪的景觀(guān)應用03-13