J2ME的Thread使用

Thread 可以让我们的程序看起来同时间作一个以上的事情,范例如下:

//MyThread.java

public class MyThread extends Thread {
    boolean exit = false;
    char printchar;
    public MyThread(char c) {
        printchar = c;
    }

    public void run() {
        while (!exit) {
            System.out.print(printchar);
            System.out.flush();
            try {
                Thread.sleep(1000);
            } catch (Exception e) {}
        }
    }
}


//ThreadTest.java

import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;

public class ThreadTest extends MIDlet {
    MyThread mt1;
    MyThread mt2;
    public ThreadTest() {
    }

    public void startApp() {
        mt1 = new MyThread('A');
        mt1.start();
        mt2 = new MyThread('B');
        mt2.start();
    }

    public void pauseApp() {
    }

    public void destroyApp(boolean unconditional) {
        mt1.exit = true;
        mt1 = null;
        mt2.exit = true;
        mt2 = null;
    }
}

执行结果:
ABBAABBAABBAABE………….

每个人的结果都会不同,A、B 印出的数目则看何时关闭MIDlet 而定上述范例中,有几个重点必须注意:

1. Thread 的建立有两种方法,第一是直接继承Thread 类别,并实作其run()方法,这是上述范例所使用的方式。第二种是实作Runnable 接口,并实作其run()方法。这两种方法请参阅一般讲解Java 程序语言的书,都会有详尽的说明。一般建议使用第二种方法,但是第一种方法比较简单。

2. 启动Thread 时,请教用其start()方法。切莫因为实作run()方法就直接叫用run(),否则无法达到多绪执行的效果。

3. 要结束一个Thread 的执行,请利用自己定义的旗标(flag)。当外头设定此旗标时,Thread 自动离开run()方法,此时就会造成Thread 结束。虽然在J2SE之中的Thread 类别有stop()方法可以结束Thread 的执行,但是这个方法也已经被列为不建议使用(deprecate)。

其它Thread 的方法,请参阅一般讲解Java 程序语言的书,不过CLDC 里头的Thread 功能没有J2SE 那么多。