java的runnable接口(另一种创建线程的方式)

来源:百度文库 编辑:神马文学网 时间:2024/04/28 17:10:52
我们知道java中是不存在多继承的。那么如果一个类已经继承了一个父类,同时要实现多线程的时候,显然是不能再通过同时继承Thread类来实现了。那么应该如何实现多线程呢?
这时的解决办法就是通过直接实现接口Runnable来实现。其中run方法是这个接口Runnable中所声明的唯一的方法。
请看下面的例子:
///////实现Runnable接口的线程
public class HelloThread implements Runnable{
String message;
HelloThread(String message){
this.message=message;
}
public void run(){
/*int sleeptime=(int)(Math.random()*3000);          ///A
try{                                              //B
Thread.sleep(sleeptime);                             ///C
}catch(InterruptedException e){}                  ///D
*/
System.out.println(message);
}
public static void main(String args[]) throws InterruptedException{
HelloThread hello1=new HelloThread("Good");
HelloThread hello2=new HelloThread("morning");
HelloThread hello3=new HelloThread("to");
Thread h1=new Thread(hello1);
Thread h2=new Thread(hello2);
Thread h3=new Thread(hello3);
h1.start();
h2.start();
h3.start();
/*hello1.join();                             ////H
hello2.join();                                ///I
hello3.join();                               ////J
*/
try{                                           ///////E
Thread.sleep(1000);                         ///////F
}catch(InterruptedException e){  }          ///G
System.out.println("you!");
}
}
说明:1、代码中绿色的字体是与文章“在java中创建和运行简单的线程”中通过继承Thread类实现多线程的代码中不同的地方,请比较理解。
2、我们调用sleep()方法的时候必须调用Thread.sleep()而不是sleep(),因为HelloThread类并不是从Thread类派生的。
3、关于线程的创建:继承Thread类的线程类在创建时直接构造一个该类实例即可。但是对于实现Runnable接口的类,要分两步实现。首先创建一个该类的实力,其次把创建的实例作为参数传递给new的Thread构造函数,则实例化的Thread对象就是创建成功的Thread实例。
4、通过调用Thread类的start方法使该线程可以运行。由上可知,对于线程的各种方法的调用都是通过Thread类或者其实例调用的。不能直接使用实现Runnable接口的类的实例调用。