在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 shandong ;

 

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

    }

  }

 

}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值