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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 余明辉 中级黑马   /  2012-8-5 20:06  /  1981 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

为什么要给Thread类的构造方法传递Runnable的子类对象?
多线程的知识点,总是学的懵懵懂懂的

6 个回复

正序浏览
创建线程的第一种方式:继承Thread类。
步骤:
1,定义类继承Thread。
2,复写Thread类中的run方法。
    目的:将自定义的代码存储在run方法中。让线程运行。
3,建立线程对象,调用线程对象的start方法,该方法两个作用:启动线程,调用run方法。
创建线程的第二种方式:实现runnable接口。
步骤:
1,定义类实现Runnable接口
2,覆盖Runnable接口中的run方法。将线程要运行的代码存放在该run方法中。
3,通过Thread类建立线程对象。
4,将Runnable接口的子类对象作为实际参数传递给Thread类的构造函数。       
5,调用Thread类对象的start方法开启线程并调用Runnable接口子类的run方法。
实现方式和继承方式有什么区别呢?
实现方式好处:避免了单继承的局限性。
在定义线程时,建议使用实现方式。

为什么要将Runnable接口的子类对象传递给Thread的构造函数。
因为,自定义的run方法所属的对象是Runnable接口的子类对象。
所以要让线程去执行指定对象的run方法。就必须明确该run方法所属对象,所以必须将该run方法所属对象传递给Thread类的构造函数。
回复 使用道具 举报
实现多线程有两种方法

第一种是继承Thread类,然后建立线程复写.run方法,最后通过.start来启动线程
这种方法有个缺陷就是java无法多继承,所以有很大的局限性

第二种就是通过实现Runnable接口,然后再创建的类中复写run方法,然后创建线程对象即Thread类的对象
然后将Runnable接口的子类对象作为参数传给Thread即可,这种方法的好处是,既实现了多线程,又可以继承别的父类

回复 使用道具 举报
谢谢各位,我已经明白了,把Runnable的实现类传给Thread,是因为只有Thread类有start方法
问题已经解决
回复 使用道具 举报
因为JAVA是单继承的,当一个类继承了Thread类,就不能继承其它的类,而实现runnable接口则可以继承其它的类了,所以实现runnable接口的扩展性比继承Thread类好。
回复 使用道具 举报
创建线程的方法有两个
1,继承Thread类
Thread是线程类是吧,创建线程是new Thread()或 newThread(Runnable r);
我的理解是设计思想的问题,你看java不支持多继承,如果工人继承了人,就不能继承Thread类了,就不能实现多线程了。
2.实现runnable接口
这个时候工人就可以继承人类实现Runnable接口复写run方法,来实现多线程
但是要启动线程要通过Thread类的start方法,来完成,所以Thread提供了构造函数来接受ruannable接口的子类。
设计思想大概就是这样,我也是半懂,呵呵,希望对你有用!
回复 使用道具 举报
...看api啊,它的构造方法就是接收一个Runnable的实例啊。实现了Runnable接口就可以当做线程用了。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马