如果要创建的线程类已经有一个父类,这时就不能再继承Thread类,因为Java不支持多继承,所以需要实现Runnable接口来应对这样的情况。
实现Runnable接口的语法格式如下:
提示:从JDK 的API中可以发现,实质上Thread类实现了Runnable接口,其中的run()方法正是对Runnable接口中run()方法的具体实现。
实现Runnable接口的程序会创建一个Thread对象,并将Runnable对象与Thread对象相关联。从表8-1可以看出Thread类有两个与Runnable有关的构造方法:
使用上述两种构造方法之一均可以将Runnable 对象与Thread 实例相关联。使用Runnable接口启动线程的基本步骤如下:
(1)创建一个Runnable对象。
(2)使用参数带Runnable对象的构造方法创建Thread实例。
(3)调用start()方法启动线程。
通过实现Runnable接口创建线程时,开发人员首先需要编写一个实现Runnable接口的类;然后实例化该类的对象,这样就创建了Runnable对象;接下来,使用相应的构造方法创建Thread实例;最后使用该实例调用Thread类的start()方法启动线程,如图8-3所示。
(www.xing528.com)
图8-3 使用Runnable接口启动线程流程
【例8-4】 编写一个简单的案例演示如何实现Runnable接口,以及如何启动线程。
(1)首先创建一个自定义的My Runnable类,让该类实现Runnable接口,并在run()方法中输出一个字符串。代码如下:
(2)接下来在主线程中编写代码,创建一个MyRunnable类实例,并将该实例作为参数传递给Thread类的构造方法,最后调用Thread 类的start()方法启动线程。具体实现代码如下:
如上述代码所示,启动线程的方法非常简单。运行结果如下所示,同样验证了线程执行的随机性。
注意:要启动一个新的线程,不是直接调用Thread 子类对象的run()方法,而是调用Thread子类的start()方法。Thread类的start()方法会产生一个新的线程,该线程用于执行Thread子类的run()方法。
另外,从面向对象的角度来看,Thread类是一个虚拟处理机严格的封装,只有当处理机模型修改或扩展时,才应该继承该类。由于Java技术只允许单一继承,因此如果已经继承了Thread类,就不能再继承其他任何类,这会使用户只能采用实现Runnable接口的方式创建线程。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。