网站首页 语言 会计 电脑 医学 资格证 职场 文艺体育 范文
当前位置:书香门第 > IT认证 > SUN认证

关于TimerTask与Timer类的应用

栏目: SUN认证 / 发布于: / 人气:1.41W

Timer类就像一个定时器,用于设置特定的时间或周期,来配合线程动作的执行,但是只调用Timer无法执行线程动作,必须配合另一个类TimerTask的方法才能使用。从示例6-13中可以发现Timer类与Thread类很相近。

关于TimerTask与Timer类的应用

public Timer ()

创建一个新的timer对象。

Timer属于计时器类,Time建立后,需要调用schedule()方法来执行计划任务,计划调度的方法有许多运用方式:

public void schedule (TimerTask task, long delay)

执行任务前先等待一段时间。task代表要执行的任务,delay代表需要等待的时间,单位为毫秒(1000毫秒为1秒)。

public void schedule (TimerTask task,

Date time)

在指定的系统时间time之后开始执行任务。

public void schedule (TimerTask task,

long delay,

long period)

延迟一段时间后开始执行任务,任务按照设定的周期执行。传入的.参数:delay为延迟时间,period为周期时间,单位均为毫秒。

public void schedule(TimerTask task,

Date firstTime,

long period)

在指定的时间后开始执行任务,任务按照设定的周期执行。传入的参数:firstTime为指定等待时间,period为周期时间,单位都是毫秒。

public void scheduleAtFixedRate (TimerTask task,

long delay,

long period)

执行任务内容后,等待delay时间,再按照period周期时间继续执行任务,单位都是毫秒。

public void scheduleAtFixedRate

(TimerTask task,

Date firstTime,

long period)

先等待一段时间firstTime,再执行计划任务,然后按照period周期时间继续执行任务,单位都是毫秒。

public void cancel()

停止timer计时。

有了Timer的各项调用方法,还不能直接执行计划任务,需要跟TimerTask类共同运用才能使计划任务开始运行。TimerTask所包含的相关方法如下:

public void TimerTask ()

创建一个新的TimerTask对象。

public abstract void run()

运行计划任务的工作内容。

public void cancel()

中止TimerTask类的执行流程,不再执行所调度的工作内容。

public void scheduleExcutionTime()

实际运行计划任务所用的时间。

示例6-13

Timer和TimerTask类运行计划任务

×/

import et.×;

import i.×;

import .×;

public class threadDemo3 extends MIDlet

{

Display display;

canvasThread canvasthread;

public threadDemo3()

{

canvasthread=new canvasThread();

display=isplay(this);

}

public void startApp()

{

urrent(canvasthread);

}

public void pauseApp(){}

public void destroyApp(boolean unconditional){}

public class canvasThread extends Canvas

{

int gameaction=0;

int view=0;

boolean again;

//声明一个Tim er类

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:

//运行计划任务

actionView();

break;

}

}

public void paint(Graphics g)

{

olor(0xFFFFFF);

Rect(0, 0, getWidth(), getHeight());

olor(0);

String("Timer线程动画应用", getWidth()/2, 20,

TER | );

Image(sunImage[view], getWidth()/2, 50, TER |

);

Image(cloudImage[view], getWidth()/2, 50, TER

| );

}

private void actionView()

{

安排一个计划任务

运行任务内容:goCanvas()

delay时间:500毫秒

period周期:500毫秒

×/

dule(new goCanvas(), 500, 500);

}

//计划任务程序内容

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;

}

}

}

}

【说明】本线程使用计划任务进行,所达到的效果跟使用线程的方式是相同的。只是在计划的内容上有所不同,例如不需要sleep()暂停时间,而是由schedule控制暂停时间。

Tags:TimerTask Timer