1创建线程的方法-----继承Thread类
java.lang.Thread是java中用来表示线程的类,其中定义的许多方法为完成线程的处理工作提供了比较完整的功能。如果将一个类定义为Thread的子类,那么这个类也就可以表示线程。
定义一个线程类,它继承类Thread并重写其中的方法run().这时在初始化这个类的实例时,目标对象target可以为null,表示这个实例本身具有线程体。但是java只支持单继承,用这种方法定义的类不能再继承其他类。
用Thread类的子类创建线程的过程包括三步:
1. 从Thread类派生一个子类,在类中一定要实现run()方法
Class Mission extends Thread{
public voidrun(){
}
}
2. 然后用该类创建一个对象
Mission newthread = new Mission();
3. 用start()方法启动线程。
newthread.start();
public void run(){}被称为线程体,它是整个线程的核心,线程所要完成的任务的代码都定义在线程体中,
2.创建线程的方法二----实现Runnable接口
Runnable是java中用以实现线程的接口,从根本上讲,任何实现线程功能的类都必须实现该接口。前面用到的Thread类实际上就是因为实现了Runnable接口,
publicclass Thread extends Object implements Runnable
所以它的子类才相应的具有线程功能的。
Runnable接口中只定义了一个方法就是run()方法,也就是线程体。用Runnable接口实现多线程时,也必须实现run()方法,也需要启动start()启动线程,但此时常用Thread类的构造方法来创建线程对象。
Thread的构造方法中包含有一个Runnable实例的参数。这就是说,必须定义一个实现Runnable接口的类并产生一个该类的实例,对该实例的引用就是适合于这个构造方法的参数。
class PrimeRun implements Runnable {
long minPrime;
PrimeRun(longminPrime) {
this.minPrime =minPrime;
}
public void run() {
// compute primeslarger than minPrime
. . .
}
}
然后,下列代码会创建并启动一个线程:
PrimeRun p = newPrimeRun(143);
new Thread(p).start();
每个线程都有一个标识名,多个线程可以同名。 如果线程创建时没有指定标识名,就会为其生成一个新名称。