在上一小节中通过继承 Thread 类实现列多线程,但是这种方式有一定的局限性。因为 Java 中只支持单继承,一个类一旦继承了某个父类就无法再继承 Thread 类,例如学生类 Student 继承了 Person 类,就无法通过继承 Thread 类创建线程。
为了克服这种弊端,Thread 类提供了另外一个构造方法 Thread(Runnable target) ,其中,Runnable 是一个接口,它只有一个 run()方法。通过** _Thread(Runnable target))_构造方法创建线程对象时,只需为该方法传递一个实现了 Runnable 接口的实例对象,这样创建的线程将调用实现了 Runnable 接口的类中的_ run()_方法作为运行代码,而不需要调用 Thread 类中的 _run()_方法。**
接下来通过一个案例来演示如果通过实现 Runnable 接口的方式来创建多线程,如下所示。
public class example03 {
public static void main(String[] args) {
MyThread myThread = new MyThread(); //实例化对象
Thread thread = new Thread(myThread); //创建线程对象,并传入参数
thread.start(); //开启线程,执行线程中的 run()方法
while (true) {
System.out.println("main()方法在运行");
}
}
}
class MyThread implements Runnable{
@Override
public void run() { //线程的代码块,当调用 start()方法时,线程从此处开始执行
while(true) {
System.out.println("MyThread 类的 run()方法在运行");
}
}
}
运行结果如下所示。
上述代码块中,MyThead 类实现了 Runnable 接口,并重写了 Runnable 中的 run()方法,通过 Thread 类的构造方法将 MyThread 类的实例对象作为参数传入。从运行结果可以看出,main()方法和 run()方法中的打印语句都执行了,说明上述代码块实现了多线程。