黑马程序员技术交流社区

标题: 关于thread和runable区别的疑问 [打印本页]

作者: yhnan    时间: 2013-3-17 17:14
标题: 关于thread和runable区别的疑问
本帖最后由 易贺男 于 2013-3-17 22:00 编辑

创建线程的两种方式:一个是继承一个是实现,老师在说这两种方法的区别时说
继承Thread:线程代码存放在Tthread子类的run方法中
实现Runable:线程代码存放在接口子类的run方法中
但是如果用Ticket extends Thread或者Ticket implementsRunable
这不都是线程代码存放在Ticket(子类)的run方法中吗?我自认为这是共同点也说得过去吧
或者我理解错了,请转过弯来的人事给疏通疏通

作者: HM刘博    时间: 2013-3-17 17:25
我认为也可以理解为共同点,因为都要复写父类中的run方法
作者: 姓名长度不符    时间: 2013-3-17 17:50
Thread是类,Runable是接口,如果采用继承,那么该类无法再继承其他类了,代码灵活性变小
若实现接口,类还可以继承与其他类,只是开启线程的时候用到多态,new个Thread对象就可以了
根据实际情况来选择是继承呢还是选择接口
作者: 罗威    时间: 2013-3-17 17:52
Thread类本身是实现了Runnable 接口,所以Thread类的run()方法重写Runnable接口的run()方法;
你要多线程就必须重写他们两个的run()方法,不过你当然也可以不重写,前提是你自己可以编写一个能操作windows系统进程的方法!JAVA语言应该写不出,C++可以写的出!

JAVA工程师就是怕你自己不知道怎么写,所以他帮你把代码写好了并且封装在了run()方法中!你如果需要用多线程 要么实现我,要么继承我!

Thread类的run()方法的底层实现,应该也super了Runnable接口的run()方法;这个源代码JAVA没有开源看不到!

为什么要用Runnable接口来创建多线程呢?
你想想 比如说 你本来已经继承了一个类了,那么你又想多线程怎么办?难不成再继承Thread类?你要知道Java中的类不支持多继承哦!所以就必须用Runnable接口来实现你的需求不是吗?

作者: 郭利超    时间: 2013-3-17 18:18
1、Runable里没有run(),而是规定implementing   class必须要有run(),而且Runnable的作用仅限于此;而Thread   class里有许多好用的method,比如sleep()等  

  2、当你发现必须extends其他某个class,而又要用线程,因为无法extends   Thread,所以要implements   Runnable  

  3、如果你的某个class   A   implements   Runnable,则不可以直接用这个class,只能用new   Thread(A)得到的thread   object  

  4、对thread   object,用start()来启动,该method会先initialize   thread   object,然后invoke它的run()

    总之,使用Thread 需要用new Thread()或者new Thread(Runable target),就是说Runable的子类必须实现run()方法,并由一个Thread来用start()方法来调用Runable的run();
作者: 陈丽莉    时间: 2013-3-17 19:31
若还有问题,请继续追问,或完善问题;没问题了请将帖子分类改成【已解决】~




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2