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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李涛兴 中级黑马   /  2012-11-15 22:11  /  1540 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 李涛兴 于 2012-11-15 22:35 编辑

使用接口方式实现线程问题的时候,为什么要将Runnable接口的子类对象作为实际参数传递给Thread类的构造函数?可以理解是Runnable没有实现线程的方法,即没有start()方法吗?

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 神马都是浮云

查看全部评分

4 个回复

倒序浏览
Java API中这样写道:

Runnable 接口应该由那些打算通过某一线程执行其实例的类来实现。类必须定义一个称为 run 的无参数方法。

设计该接口的目的是为希望在活动时执行代码的对象提供一个公共协议。例如,Thread 类实现了 Runnable。激活的意思是说某个线程已启动并且尚未停止。

此外,Runnable 为非 Thread 子类的类提供了一种激活方式。通过实例化某个 Thread 实例并将自身作为运行目标,就可以运行实现 Runnable 的类而无需创建 Thread 的子类。大多数情况下,如果只想重写 run() 方法,而不重写其他 Thread 方法,那么应使用 Runnable 接口。这很重要,因为除非程序员打算修改或增强类的基本行为,否则不应为该类创建子类。

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 赞一个!

查看全部评分

回复 使用道具 举报
你可以找一下,接口那种方式实现线程,最终底层代码也是另外一种方式
回复 使用道具 举报
 当一个类需要继承另一个类后,就不能再去继承Thread类了
  我们可以使用Thread类的另一个构造器:Thread(Runnable)。
  Runnable – 一个接口,只有一个run()方法。
  Runnable接口的对象表示一个任务!任务是需要线程来执行的。
  可以new Thread(new MyRunnable())来创建一个线程对象,这个线程对象就已经有了任务了。
  在启动线程时就执行自己的任务。

Thread是完成任务的人,而Runnable就是任务
  Thread类是完成任务的人,而Runnable只是一个任务而已。
  需要把Runnable对象给Thread类,然后启动的还是Thread对象。
  

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
由于Java是单继承关系,如果继承了Thread类就无法再继承其他的类,因此继承Thread的方法不常用,Java中还提供了一个实现多线程的方法,即Runable接口。
    由于Runable接口中只定义了一个方法,即run(),之前提到多线程需要操作系统的支持,而run()方法是无法启动的,需要通过Thread类的start()启动操作系统对多线程的支持。在Thread类中提供了一个以Runabel类型参数的构造函数,因此另一个实现多线程的方法是先实现Runable接口,然后再通过Thread(Runable)构建一个线程,通过Thread中的start()方法间接启动操作系统对多线程的支持
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马