A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© huangqili 中级黑马   /  2014-7-12 11:25  /  1064 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 huangqili 于 2014-7-12 11:26 编辑

解释Runnable接口与Thread类的区别。大家都知道,Runnable接口与Thread类都是用来创建线程类的,它们都需要实现run()方法,似乎没什么区别。
其实,它们还是有区别的,请看以下。
首先大家都应该知道,JAVA的类不允许多继承的,也就是只能继承自一个类。
那么,如果线程类继承了Thread以后,它就不能再继承其他的类了。
而Runnable接口,就不会有这样的问题,因为类是可以实现多个接口的。
另外,Thread提供了很多关于线程的方法,例如,获取线程id线程名线程状态等方法。
对于比较复杂一点的线程,可能就需要run()方法中调用这些方法,而Runnable接口使用起来就没有那么方便了。

如果让一个线程类实现Runnable接口,那么当调用这个线程的对象开辟多个线程时,
可以让这些线程调用同一个变量;若这个线程是由继承Thread类而来,那么就会麻烦一些,
则要通过内部类来实现上述功能,利用的就是内部类可以任意访问外部变量这一特性。

我举个例子:
  1. class MyThread implements Runnable {  //实现Runnable接口
  2.       int index = 0;  //index变量
  3.       public void run() {
  4.             ...............
  5. }
  6. }
  7. class MyThread {
  8.       int index = 0;
  9. private class InnerClass extends Thread {  //定义一个内部类,继承Thread
  10.       public void run() {
  11.             .............
  12. }
  13. }
  14.       Thread getThread() {
  15.       return new InnerClass();  //这个函数的作用是返回InnerClass的一个匿名对象
  16. }
  17. }
复制代码

  1. class MyThread implements Runnable {  //实现Runnable接口
复制代码
总结:
(1)、线程类继承自Thread则不能继承自其他类,而Runnable接口可以。
(2)、线程类继承自Thread相对于Runnable来说,使用线程的方法更方便一些。
(3)、实现Runnable接口的线程类的多个线程,可以更方便的访问同一个变量,而Thread类则需要内部类来进行替代。



2 个回复

倒序浏览
通过你的代码
你说的概念我一个都没理解到:(
回复 使用道具 举报
学习了   
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马