程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> J2ME >> 使用Timer和TimerTask來實現多線程

使用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方法。

下面是一個實現簡單的數字變化的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();

}

}

}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved