j2me 使用Timer和TimerTask来实现多线程

来源:互联网 发布:第3套人民币10元爱淘宝 编辑:程序博客网 时间:2024/05/26 12:02

在Java中可以使用两种方式来实现多线程操作,这两种方式依次是:

Timer类—定时器类派生自Object。它是个定时器类,作为后台线程,执行未来的任务。任务可安排一次性执行,定期重复执行。于每个 

Timer对象对应的用于执行该定时器所有任务的单个后台线程Timer类是安全的线程类多个线程可以共享一个定时器,而不需要一个外部同步定时器对象(external synchronization)。Timer不提供实时保证:它使用Object.wait方法执行任务。

TimerTask类—定时器任务类。它是一个抽象类,需要覆盖重写实现想要执行的任务,所有线程执行的任务代码都写在该类内部。TimerTask快速完成如果一个计时器任务需要过多的时间来完成,会延误后续任务的执行有问题的任务完成后,可能会聚成一团,进而及时执行 

所有的任务已经完成执行时,Timer对象消失定时器的任务执行线程正常终止受垃圾回收机制支配不过,这可能需要任意的时间而生。默认情况下,任务执行线程并不作为守护线程运行,所以可以终止终止应用程序
 
如果一个调用者想要迅速终止计时器的任务执行线程应该调用计时器的cancel方法
 
举个例子。如果计时器的TimerTask线程意外终止因为它的stop方法被调用时,任何进一步尝试执行TimerTask​​将导致一个IllegalStateExceptioncancel方法意外终止也会导致IllegalStateException

构造Timer 对象: Timer timer = new Timer();

对象创建以后,可以使用其中的schedule或者是scheduleAtFixedRate方法起启动一个任务(Task)动作。需要停止时,可以调用Timer对象的cancel方法实现,该方法可以停止该Timer启动的所有任务(Task)。

 

下面是一个简单的例子:

import java.util.*;

import javax.microedition.lcdui.*;

/**

* 使用Timer和TimerTask实现多线程

* 该代码实现的功能是屏幕上的数字一直增加,按下5键暂停,再次按下5键继续增加

*/


public class NumberCanvas extends Canvas {


/**定时器*/


Timer timer;


/**屏幕上显示的数字*/


private int number = 0;


/**屏幕宽度*/


private int width;


/**屏幕高度*/


private int height;

public NumberCanvas() {


//获得屏幕的高度和宽度


width = this.getWidth();

height = this.getHeight();


//启动线程


start();


}


/**


* 启动线程


*/


private void start(){

if(timer == null){


//启动定时器


timer = new Timer();

timer.schedule(new NumberTimerTask(),0,300);

}


}


/**


* 停止线程


*/


private void stop(){ if(timer != null){


//停止线程


timer.cancel();

timer = null;


}


}


/**


* 按键处理


* @param keyCode int 按下的键值


*/


public void keyPressed(int keyCode){


//判断按下的数字键5


if(keyCode == Canvas.KEY_NUM5){


//判断当前的状态


if(timer == null){

start();

}else{

stop();


}

}

}

protected void paint(Graphics g) {


//清屏

g.setColor(0xffffff);

g.fillRect(0,0,width,height);

g.setColor(0x000000);

g.drawString(String.valueOf(number),50,50,Graphics.TOP | Graphics.LEFT);


}


/**

* 线程任务动作

*/

public class NumberTimerTask extends TimerTask{

public void run(){


//数字增加

number++;

//重绘

repaint();


}

}

}

1、继承Thread类

2、实现Runnable接口

但是Java语言中还有两个类,可以组合来实现多线程的控制,这两个类就是java.util包中的Timer和TimerTask类。

 

原创粉丝点击