首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> J2ME

J2ME 使用 Timer 與 TimerTask 實現多線程定時任務

     編輯:J2ME

J2ME 多線程替代方案:Timer + TimerTask 實作詳解

除了繼承 Thread、實作 Runnable,J2ME 可利用 java.util.Timer 與 TimerTask 組合實現結構清晰的多線程排程。本文說明原理、API 用法並提供完整範例:螢幕數字遞增,按鍵 5 暫停/繼續。

核心類別職責

  • Timer:定時器,負責排程。方法:schedule(task, delay, period), scheduleAtFixedRate(...), cancel() (停止所有任務)。
  • TimerTask:抽象類別,繼承並實作 run() 定義任務邏輯。方法:cancel() (停止自身)。

優缺點比較

完整範例:數字遞增畫面

package shandong;

import java.util.*;
import javax.microedition.lcdui.*;

public class NumberCanvas extends Canvas {
    private Timer timer;
    private int number = 0;
    private int width, height;

    public NumberCanvas() {
        width = getWidth();
        height = getHeight();
        start();
    }

    private void start() {
        if (timer == null) {
            timer = new Timer();
            timer.schedule(new NumberTimerTask(), 0, 300); // 立即開始,每 300ms 執行
        }
    }

    private void stop() {
        if (timer != null) {
            timer.cancel();
            timer = null;
        }
    }

    public void keyPressed(int keyCode) {
        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);
    }

    // 內部類別:定時任務
    class NumberTimerTask extends TimerTask {
        public void run() {
            number++;
            repaint(); // 觸發 paint()
        }
    }
}

關鍵點說明

  • timer.schedule(task, 0, 300):delay=0 立即執行首次,period=300 毫秒週期。
  • repaint() 在非事件執行緒中呼叫安全,系統會排程重繪。
  • 按鍵處理中透過 timer == null 判斷狀態,切換啟停。
  • timer.cancel() 會停止所有已排程任務並釋放資源,後續不可重用該 Timer 實例,需 new 新實例。

適用場景

  • 遊戲主迴圈 (固定幀率更新邏輯/繪圖)。
  • 週期性網路輪詢、資料同步。
  • 動畫、倒數計時器等定時觸發需求。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
維度Thread/RunnableTimer/TimerTask
程式碼結構較分散清晰,任務封裝於獨立類別
多任務管理自行管理Timer 統一排程、啟停
類別數量少多 (每任務一 TimerTask)
系統開銷低稍高