一.线程和进程的简介
关于进程和线程的简介可以参见:
http://blog.csdn.net/feng131719/archive/2009/06/05/4244286.aspx
二.线程的实现形式
多线程有两种实现形式,通过定时执行也可以达到多线程的目的。下面就每一种实现做一下简单介绍:
1.继承Thread类(java.lang.Thread)
创建一个继承自Thread 类子类。但是必须覆盖Thread 的 run() 函数来完成有用的工作。使用时并不直接调用此函数;而是必须调用 Thread 的 start() 函数,该函数再调用 run()。
例如:
class PrimeThread extends Thread {
long minPrime;
PrimeThread(long minPrime) {
this.minPrime = minPrime;
}
public void run() {
// compute primes larger than minPrime
. . .
}
}
然后,下列代码会创建并启动一个线程:
PrimeThread p = new PrimeThread(143); p.start();当执行start方法时候,将会自动运行run方法,但是执行start方法时候只做了一件事,就是将线程转化为可执行状态,然后等待操作系统进行调度并运行,因此无法保证线程能立即启动。在JAVA中,Thread类实现了Runnable接口,因此run方法是通过实现接口Runnable中的抽象方法。二、直接实现Runnable多线程接口(java.lang.Runnable)线程接口Runnable中只有一个抽象方法run,通过实现Runnable接口中的方法的类即可创建出有多线程特征的对象,但该对象并无法使其启动线程,需要作为参数并借助Thread的构造方法构造创建对象并调用start方法对线程进行启动。class PrimeRun implements Runnable { long minPrime; PrimeRun(long minPrime) { this.minPrime = minPrime; } public void run() { // compute primes larger than minPrime . . . } }然后,下列代码会创建并启动一个线程:
PrimeRun p = new PrimeRun(143); new Thread(p).start();
三、使用任务组合实现多线程
在J2ME中,同样具有JAVA中的任务处理组合类,他们分别为Timer和TimerTask,可以使用他们实现多线程,简单说就是定时实现任务。
Timer是JAVA中的一个定时器,可以实现在某一时间做某件事或者在某一时间段做某些事,分别通过方法schedule(TimerTask tt,long millis)和schedule(TimerTask tt,long start,long off)。
TimerTask是一个任务类,通过继承该类并覆盖方法run即可创建一个任务。
如:public class TimerTaskS extends TimerTask{
public TimerTaskS(){
//constructor
}
public void run(){
//run code entity
}
}
任务调用:
Timer timer = new Timer();
//3秒钟后执行任务
timer.schedule(new TimerTaskS(),3000);
//3秒钟后执行任务并且之后每5秒钟执行一次
timer.schedule(new TimerTaskS(),3000,5000);
有此可见在使用计时任务可以达到实现线程的效果,分别执行不同的并发操作,通过Timer类对象来操作TimerTask对象,通过schedule方法来计时执行任务,在结束任务的时候,通常使用cancel()来实现。
通常情况下,在J2ME软件中我们通过手机按键来触发一系列相应的操作,在程序响应处理过程中较多会涉及网络操作、数据存储等相对消耗时间和资源的操作,而这些操作往往需要一定的时间才能完成,因此在处理按键响应过程中通常我们需要建立线程处理,避免程序出现死机现象。
public void commandAction(Command c, Displayable s) {
if(c==do1Com){
//创建实现接口线程
new Thread(new RunnableSimple()).start();
}
else if(c==do2Com){
//创建继承Thread线程
new ThreadSimple().start();
}
else{
//创建任务线程
new Timer().schedule(new TimerTaskS(),3000,20);
}
}