1. 多线程
1.1 创建线程类
在Java中可以简单的从Thread类中继续创建自己的线程类:
public class MyFirstThread extends Thread {
public void run() { . . .}
}
说明:
(1) Thread类位是java.lang包中,所以可以不用显示import;
(2) 从Thread类中继续下来的类最好重载run()方法,以运行需要的代码;
可以按以下方法实例化并运行线程:
MyFirstThread aMFT = new MyFirstThread();
aMFT.start();
说明:
(3) 实例化线程类后,系统会初始化一些参数,主要是为线程创建名称,把新的线程加入指定的线程组,初始化线程运行需要的内存空间,指定新线程的优先级别,指定它的守候线程;
(4) start方法是Thread类中的方法,它会调用run方法,在新的线程中运行指定的代码;
(5) 除了start方法外,从Thread继续下来的类还具有其它一些主要的方法:stop,suspend,resume等;
以下是一个完整的Thread派生类:
1: public class ComplexThread extends Thread {
2: private int delay;
3:
4: ComplexThread(String name, float seconds) {
5: super(name);
6: delay = (int) seconds * 1000; // delays are in milliseconds
7: start(); // start up ourself!
8: }
9:
10: public void run() {
11: while (true) {
12: System.out.println(Thread.currentThread().getName());
13: try {
14: Thread.sleep(delay);
15: } catch (InterruptedException e) {
16: return;
17: }
18: }
19: }
20:
21: public static void main(String argv[]) {
22: new ComplexThread("one potato", 1.1F);
23: new ComplexThread("two potato", 1.3F);
24: new ComplexThread("three potato", 0.5F);
25: new ComplexThread("four", 0.7F);
26: }
27: }
1.2 Runable接口
创建多线程运行指定代码的另一种方法是,在创建类时implement Runable这个接口:
public class MySecondThread extends ImportantClass implements Runnable {
public void run() {. . .}
}
说明:
(1) 该类implement Runable接口,就表明有意图运行在单独的线程中,Thread也是implement Runable接口的;
(2) Implement Runalbe接口至少需要实现run方法;
以下是创建新线程运行该类的实例:
MySecondThread aMST = new MySecondThread();
Thread aThread = new Thread(aMST);
aThread.start();
说明:
(3) Thread类有多个构造函数Thread()、Thread(Runable target)等,本例中用的就是第二个构造函数,它有一个Runable类型的函数,所以要在多线程中运行的实例的类必须是implement Runable的;
(4) AThead.start()方法调用Thread实例的中的target.run方法,本例中就是MySecondThread实例中的run方法;
(5) Thread构造函数还可以指定线程名,运行所需的stack,线程所属的组等;