`

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

阅读更多

J2ME中使用TimerTimerTask来实现多线程

作者:陈跃峰

出自:http://blog.csdn.net/mailbomb

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

1、继承Thread

2、实现Runnable接口

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

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

构造对象:

Timer timer = new Timer();

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

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

下面是一个实现简单的数字变化的J2ME代码:

package <place w:st="on"><state w:st="on">shandong</state></place>;

import java.util.*;

import javax.microedition.lcdui.*;

/**

* 使用TimerTimerTask实现多线程

* 该代码实现的功能是屏幕上的数字一直增加,按下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();

}

}

}

分享到:
评论

相关推荐

    J2me Alert Timer实例源码.rar

    在这个"J2me Alert Timer实例源码.rar"压缩包中,我们可以找到一些关于如何在Java ME平台上使用Alert和Timer类的实例代码,这对于想要开发Java小游戏的开发者来说非常有帮助。 Alert是Java ME中的一种UI组件,用于...

    【源码】J2ME时钟源码

    在实现时钟功能时,开发者可能会使用javax.microedition.lcdui.Display类来管理屏幕显示,以及Canvas或者Form类作为用户界面的基础。Canvas允许程序员自定义绘制图形,而Form则提供预定义的UI组件。由于此源码专注于...

    j2me_baiyechuang.rar

    2. **多线程**:为了实现平滑的动画效果,通常需要在一个单独的线程(如`Thread`或`Runnable`)中执行绘图代码,以避免阻塞主线程,确保应用的响应性。 3. **百叶窗逻辑**:百叶窗效果需要跟踪每个“百叶窗”(通常...

    j2me 连连看项目代码

    这需要利用到延时和重复调用的方法,例如java.util.Timer和TimerTask。 5. **状态管理**:游戏有多个状态,如开始、进行中、游戏结束等。开发者需要设计一种机制来管理这些状态,可能通过枚举类型或者状态机来实现...

    J2me游戏俄罗斯方块源码.7z

    4. **时间管理**:使用Timer和TimerTask类控制方块下落的速度,实现游戏节奏。 5. **用户界面**:使用Form或Alert展示游戏分数、状态和菜单,以及提供用户交互。 6. **内存管理**:由于J2ME设备资源有限,需要注意...

    J2ME 坦克大战 源代码

    在本篇中,我们将深入探讨基于J2ME的"坦克大战"游戏的源代码,通过分析其设计思想、结构和实现方法,帮助读者理解并掌握J2ME游戏开发的基本技巧。 一、J2ME基础 J2ME包含一系列配置和Profile,其中Mobile ...

    11. 随机数,集合和定时器1.rar

    定时器(Timer)在J2ME中是通过`javax.microedition.midlet.Timer`和`javax.microedition.midlet.TimerTask`实现的。`Timer`用于创建定时任务,而`TimerTask`则是具体的任务逻辑。通过`schedule(TimerTask task, ...

    使用Canvas建立应用程序的欢迎界面

    Thread是多线程编程的基础,用于实现程序的并发执行。在欢迎界面中,我们可能希望有一些动画效果,如图片滑动、文字渐入等,这些都需要通过额外的线程来实现,以免阻塞主线程导致界面卡顿。创建一个新线程,然后在这...

    java编写手机秒表代码

    Java提供了一个名为`java.util.Timer`和`java.util.TimerTask`的类来实现定时任务。在秒表应用中,我们可以创建一个`TimerTask`,在每次间隔(例如1毫秒)时更新显示的时间。`Timer`会定期调用`TimerTask`的`run()`...

    java版链表实现定时器功能

    在Java编程中,链表是一种重要的数据结构,它在实现各种高级功能,如定时器,中发挥着关键作用。本文将深入探讨如何利用链表来实现一个简单的定时器功能,并结合`java`、`链表`、`定时器`、`数据结构`以及`j2me`的...

    Java写的手机秒表(适合学习)

    - 使用`java.util.Timer`和`java.util.TimerTask`类来实现定时器功能,它们可以定期执行任务,例如更新秒表的显示时间。 - 设计一个UI界面,展示秒表的当前时间,可以使用MIDP中的`javax.microedition.lcdui`包来...

Global site tag (gtag.js) - Google Analytics