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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© yhnan 中级黑马   /  2013-3-17 17:14  /  2396 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 易贺男 于 2013-3-17 22:00 编辑

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

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

5 个回复

倒序浏览
我认为也可以理解为共同点,因为都要复写父类中的run方法
回复 使用道具 举报
Thread是类,Runable是接口,如果采用继承,那么该类无法再继承其他类了,代码灵活性变小
若实现接口,类还可以继承与其他类,只是开启线程的时候用到多态,new个Thread对象就可以了
根据实际情况来选择是继承呢还是选择接口

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
Thread类本身是实现了Runnable 接口,所以Thread类的run()方法重写Runnable接口的run()方法;
你要多线程就必须重写他们两个的run()方法,不过你当然也可以不重写,前提是你自己可以编写一个能操作windows系统进程的方法!JAVA语言应该写不出,C++可以写的出!

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

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

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

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
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();

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
若还有问题,请继续追问,或完善问题;没问题了请将帖子分类改成【已解决】~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马