众所周知,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方法。
下面是一个实现简单的数字变化的J2ME代码:
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();
}
}
}
分享到:
相关推荐
关于J2ME应用中一些多线程的使用方法和示例
J2ME里面的线程和网络 J2ME里面的线程和网络 J2ME里面的线程和网络
Alert和Timer编程范例 Alert和Timer编程范例
在eclipse中怎样使用j2me 在eclipse中怎样使用j2me 在eclipse中怎样使用j2me
j2me写的秒表程序,使用多线程,对于初学者是一个很好的例子。。。
J2me中文教程.pdf J2me中文教程.pdf
不过,标准的调度类 Timer 和 TimerTask 没有足够的灵活性,无法支持通常需要的计划任务类型。在本文中,Java 开发人员 Tom White 向您展示了如何构建一个简单通用的计划框架,以用于执行任意复杂的计划任务。
本程序是多线程小球的运动案例 是用J2ME开发的 本程序是多线程小球的运动案例 是用J2ME开发的 本程序是多线程小球的运动案例 是用J2ME开发的 本程序是多线程小球的运动案例 是用J2ME开发的 本程序是多线程小球的运动...
java J2me中 Alert及Timer实例源码 主要是一个有关Alert及Timer操作的实例源码,初学者必看。
基于J2ME的手机五子棋游戏设计与实现。可用的毕业设计。
J2ME API J2ME API J2ME API J2ME API J2ME API
J2me 相关Alert Timer的实例源码,学习Java小游戏的朋友会用上这些实例。
J2ME网络编程以及网络游戏的实现 111111111!!!!!!!!!!!!!!!!!
J2ME中电话记录储存的实现源码希望喜欢,顺便捞点分,呵呵
在J2ME上实现平滑的资源加载进度条 txt文本 源码描述:首先,我把我要加载的资源按其加载量来定其需要的百几比,比如我要加载一个大文件,一个小文件,我就将大文件定为80%,小文件定为20%,也就是把100%分为了两份...
java毕业设计——java基于J2ME的手机游戏开发设计与实现(论文+源代码).zip java毕业设计——java基于J2ME的手机游戏开发设计与实现(论文+源代码).zip java毕业设计——java基于J2ME的手机游戏开发设计与实现(论文+源...
在J2ME和WAP中实现电话呼叫功能.doc 在J2ME和WAP中实现电话呼叫功能.doc
J2ME用户使用手册(PDF) J2ME用户使用手册(PDF)
多线程实现的,原理很简单,这个游戏只是多线程的一个示例,没有多大的娱乐功能,学习J2ME的新手可以拿去~~
在J2ME中开发蓝牙无线软件!