本帖最后由 huangqili 于 2014-7-12 11:26 编辑
解释Runnable接口与Thread类的区别。大家都知道,Runnable接口与Thread类都是用来创建线程类的,它们都需要实现run()方法,似乎没什么区别。
其实,它们还是有区别的,请看以下。
首先大家都应该知道,JAVA的类不允许多继承的,也就是只能继承自一个类。
那么,如果线程类继承了Thread以后,它就不能再继承其他的类了。
而Runnable接口,就不会有这样的问题,因为类是可以实现多个接口的。
另外,Thread提供了很多关于线程的方法,例如,获取线程id、线程名、线程状态等方法。
对于比较复杂一点的线程,可能就需要run()方法中调用这些方法,而Runnable接口使用起来就没有那么方便了。
如果让一个线程类实现Runnable接口,那么当调用这个线程的对象开辟多个线程时,
可以让这些线程调用同一个变量;若这个线程是由继承Thread类而来,那么就会麻烦一些,
则要通过内部类来实现上述功能,利用的就是内部类可以任意访问外部变量这一特性。
我举个例子:- class MyThread implements Runnable { //实现Runnable接口
- int index = 0; //index变量
- public void run() {
- ...............
- }
- }
- class MyThread {
- int index = 0;
- private class InnerClass extends Thread { //定义一个内部类,继承Thread
- public void run() {
- .............
- }
- }
- Thread getThread() {
- return new InnerClass(); //这个函数的作用是返回InnerClass的一个匿名对象
- }
- }
复制代码
- class MyThread implements Runnable { //实现Runnable接口
复制代码 总结:
(1)、线程类继承自Thread则不能继承自其他类,而Runnable接口可以。
(2)、线程类继承自Thread相对于Runnable来说,使用线程的方法更方便一些。
(3)、实现Runnable接口的线程类的多个线程,可以更方便的访问同一个变量,而Thread类则需要内部类来进行替代。
|
|