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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

学习线程了,但是不知道Runnable和Thread两个类的区别是什么?什么场合用Runnable?麻烦解释通俗一些!谢谢

18 个回复

倒序浏览
我也刚学到这,实现多线程,有两种方法,
一种是继承Thread:
    这种必须要继承Thread,才能使用,也就是说,在你继承了其他类的时候,这种继承Thread类的方法就用不了了,因为java不支持多继承
第二种是实现 runnable接口 ,
这种只要实现了Runnable,并重写run方法,再调用Thread运行run方法,就可以使用了
回复 使用道具 举报
Wilsoncyf 发表于 2015-4-20 11:40
我也刚学到这,实现多线程,有两种方法,
一种是继承Thread:
    这种必须要继承Thread,才能使用,也就是 ...

他们分别什么时候才用到?在那些项目中?
回复 使用道具 举报
多数时候使用继承吧,
回复 使用道具 举报
星之钥匙 发表于 2015-4-21 17:27
多数时候使用继承吧,

搜索了网上的相关信息,有点明白的了!
Thread是多个线程分别完成自己的任务;
Runnable是多个线程共同完成一个任务,就像火车站共同售票一样的!
应该就是这样把
回复 使用道具 举报
猫猫虫 发表于 2015-4-21 18:18
搜索了网上的相关信息,有点明白的了!
Thread是多个线程分别完成自己的任务;
Runnable是多个线程共同完 ...

        * a.继承Thread : 由于子类重写了Thread类的run(), 当调用start()时, 直接找子类的run()方法
        * b.实现Runnable : 构造函数中传入了Runnable的引用, 成员变量记住了它, start()调用run()方法时内部判断成员变量Runnable的引用是否为空, 不为空编译时看的是Runnable的run(),运行时执行的是子类的run()方法
       
* 继承Thread
        * 好处是:可以直接使用Thread类中的方法,代码简单
        * 弊端是:如果已经有了父类,就不能用这种方法
* 实现Runnable接口
        * 好处是:即使自己定义的线程类有了父类也没关系,因为有了父类也可以实现接口,而且接口是可以多实现的
        * 弊端是:不能直接使用Thread中的方法需要先获取到线程对象后,才能得到Thread的方法,代码复杂
回复 使用道具 举报
mah707 中级黑马 2015-4-21 23:01:46
7#
解决java单继承的问题吧,用了接口
回复 使用道具 举报
原来如此
回复 使用道具 举报
这两个没什么好纠结的吧,反正用到多线程的时候就实现Runnable接口 实现run方法就行
回复 使用道具 举报
我想努力半年 发表于 2015-4-21 23:51
这两个没什么好纠结的吧,反正用到多线程的时候就实现Runnable接口 实现run方法就行 ...

线程处理的方式不一样吧!
回复 使用道具 举报
我也晕晕的  打算明天起来补习一下
回复 使用道具 举报
朋友你好,想和你聊天!
回复 使用道具 举报
猫猫虫 发表于 2015-4-21 23:58
线程处理的方式不一样吧!

一样的,你把实现Runnable接口的子类对象扔进线程。然后它就会执行里面run方法的内容了
回复 使用道具 举报
猫猫虫 发表于 2015-4-21 23:58
线程处理的方式不一样吧!

在使用Thread继承的时候,获取当前线程就可以直接用this,但是Runnable就不行,需要条用Thread的静态方法来获取。。。这是一点小注意
回复 使用道具 举报
只要没有父类,用哪个其实是一样的
回复 使用道具 举报
我也刚学习到线程,要不加个好友一起学习?QQ417628904
回复 使用道具 举报
同样的困惑
回复 使用道具 举报
首先Runnable是一个接口,不是类。当碰到多个线程共享一个数据的时候,这时候有两种方法:1.是把数据定义成静态变量;2.就是实现Runnable接口,重写run方法,但是静态变量时与类共存亡的,在内存中时间太长,所以一般这时候都用实现接口的方式
回复 使用道具 举报
名字不同
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马