`

在J2ME中使用Timer和TimerTask来实现多线程

    博客分类:
  • J2ME
阅读更多

众所周知,Java语言在语言的低层就支持多线程,在Java中可以使用两种方式来实现多线程操作,这两种方式依次是:

1、继承Thread类

2、实现Runnable接口

但是Java语言中还有两个类,可以组合来实现多线程的控制,这两个类就是java.util包中的Timer和TimerTask类。和上面的实现方式相比,使用这种方式来实现多线程,可以很方便的开启多个线程,并且代码的结构比较清晰,但是创建类的数量比较多,系统开销稍微大一些。下面详细进行一下介绍:

Timer类是一个定时器,可以每隔一段固定的时间做一件事情,而且可以很方便的停止这些动作。依次为:

构造对象:

Timer timer = new Timer();

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

TimerTask类是一个线程类,所有线程的动作代码都写在该类内部。TimerTask是一个抽象类,在实际使用过程中,一般是继承TimerTask类,然后实现实际的操作,停止TimerTask可以使用TimerTask对象里面的cancel方法。

 

package shandong; 

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(); 

		} 

	} 

} 


 

 

 

转自:http://ming-fanglin.iteye.com/blog/549548

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics