更新时间:2022年03月18日17时17分 来源:传智教育 浏览次数:
在之前的Java培训中,我们讲到了Thread类,通过继承Thread类实现可以实现多线程,但是这种方式有一定的局限性。因为Java只支持单继承,一个类一旦继承了某个父类就无法再继承Thread类,例如学生类Student继承了Person类,就无法通过继承Thread类创建线程。
为了克服这种弊端,Thread类提供了另外一个构造方法Thread(Runnable target),其中Runnable是一个接口,它只有一个run()方法。当通过Thread(Runnable target)构造方法创建线程对象时,只需要为该方法传递一行代码,而不需要调用Thread类中的run()方法。
下面通过一个案例来演示如何通过实现Runnable接口的方式来创建多线程,代码如下文件8-3所示。
文件8-3的运行结果如图8-6所示。
public class Example03 { public static void main (String[] args) { MyThread myThread = new MyThread () ; // 创建MyThread的实例对象 Thread thread = new Thread (myThread) ; // 创建线程对象 thread.start () ; // 开启线程,执行线程中的run()方法 while (true) { System.out.println("main () 方法在运行"); } } } class MyThread implements Runnable { public void run () { // 线程的代码段,当调用start()方法时,线程从此处开始执行 while (true) { System.out.println("MyThread类的run()方法在运行") ; } } }
文件8-3中,第11~17行代码定义的MyThread类实现了Runnable接口,并在第12~16行代码中重写了Runnable接口中的run()方法;第4行代码中通过Thread类的构造方法将MyThread类的实例对象作为参数转入,第5行代码中使用start()方法开启MyThread线程,最后在第6~8行代码中定义了一个while死循环。从图8-6的运行结果可以看出,main()方法和run()方法中的打印语句都执行了,说明文件8-3实现了多线程。
图8-6 文件8-3的运行结果