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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

java中用实现Runnable接口创建线程和用继承Thread类创建线程的区别是什么啊?这两种方法哪个比较好啊?我经常把它们弄混,分不清哪个是哪个。

评分

参与人数 1技术分 +1 黑马币 +5 收起 理由
枫儿 + 1 + 5 很给力!

查看全部评分

4 个回复

倒序浏览
如果使用Thread类,一个类只能继承一个Thread,如果使用Runnable接口,一个类在实现多个接口,
一般用Runnable接口,因为他避免了单继承的局限性,又能扩展功能

评分

参与人数 1技术分 +1 黑马币 +5 收起 理由
枫儿 + 1 + 5 很给力!

查看全部评分

回复 使用道具 举报
楼上正解,通过实现接口避免了单继承的局限性
回复 使用道具 举报
楼上说的很对了。我就说下我的理解吧
继承Thread就是作为Thread的子类了,那么这个类就是线程类了,显然你想做的不是让你写的类成为线程类,而只是想让那么一段代码会在某段时间运行。而且这个类就不能再继承别的类了。这样局限性是很大的。
比如
  1. class Person {}

  2. 如果想让Student创建线程
  3. class Student extends Thread{}

  4. 那么显然下边这么写不行
  5. class Student extends Person, Thread{}

  6. java单继承,不能继承两个类的

  7. 但是如果实现Runnable借口就不一样了

  8. Student extends Person implements Runnalble{}

  9. 这就是写类的时候的区别:
  10. 继承Thread不能继承别的类
  11. 实现了Runnable借口可以继承别的类,线程只是这个类的一个扩展功能而已


  12. 再说开启的区别


  13. 比如

  14. class Student extends Thread{}

  15. 那么开启这个线程是

  16. Student s = new Student();
  17. s.start();

  18. new Student().start()
  19. 如果
  20. class Student implements Runnable{}

  21. 那么开启这个线程就多一部了

  22. Student s = new Student();
  23. Thread t = new Thread(s);
  24. t.start();
  25. 这就是开启线程的区别

  26. 还是使用实现Runnable接口比较实用,毕竟还可以继承别的类,使用别的类的功能
复制代码
回复 使用道具 举报 1 0
2楼说得对,如果选择子类继承Thread类来创建进程的话,那么因为JAVA中类只支持单继承,所以子类再想继承别的类就不可能了。
而接口可以被多实现,如果选择实现Runnable接口,子类还可以同时实现其他接口,这样就增强了扩展性。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马