beautypg.com

Programming the midlet, Threads, Example – Siemens Java TC65 User Manual

Page 88

background image

TC65 JAVA User's Guide
Strictly confidential / Released

s

TC65 JAVA User's Guide_V05

Page 88 of 90

26.09.2005

12.2

Programming the MIDlet

The life cycle and structure of MIDlets are described in Chapter 6. Since the MIDlets will run
on J2ME™, all of J2ME™’s features, including threads, are available. Small applications,
such as those without any timer functions or those used only for tests and simple examples,
can be written without using threads. Longer applications should be implemented with
threads.

12.2.1 Threads

Although small applications can be written without using threads longer applications should
use them. The Java programming language is naturally multi-threaded which can make a
substantial difference in the performance of your application. Therefore we recommend
referring to Java descriptions on threads before making any choices about threading models.
Threads can be created in two ways. A class can be a subclass of Thread or it can
implement Runnable.

For example, threads can be launched in startApp() and destroyed in destroyApp(). Note that
destroying Java threads can be tricky. It is recommended that the developer read the Java
documentation on threads. It may be necessary to poll a variable within the thread to see if it
is still alive.

12.2.2 Example

/* This example derives a class from Thread and creates two instances
* of the subclass. One thread instance finishes itself, the other one
* is stopped by the main application. */

package example.threaddemo;

import javax.microedition.midlet.*;

public class ThreadDemo extends MIDlet {

/* Member variables */
boolean runThreads = true; // Flag for stopping threads
DemoThread thread1; // First instance of DemoThread
DemoThread thread2; // Second instance of DemoThread

/* Private class implementing the thread to be started by the
* main application */
private class DemoThread extends Thread {
int loops;

public DemoThread(int waitTime) {
/* Store number of loops to execute */
loops = waitTime;
System.out.println("Thread(" + loops + "): Created");
}

public void run() {
System.out.println("Thread(" + loops + "): Started");
for (int i = 1; i <= loops; i++) {
/* Check if main application asked thread to die */
if (runThreads != true) {
System.out.println("Thread(" + loops + "): Stopped from outside");
/* Leave thread */
return;

}
/* Print loop counter and wait 1 second,
* do something useful here instead */
System.out.println("Thread(" + loops + "): Loop " + i);