黑马程序员技术交流社区

标题: 学习线程了,但是不知道Runnable和Thread两个类的区别是什么? [打印本页]

作者: 猫猫虫    时间: 2015-4-20 11:31
标题: 学习线程了,但是不知道Runnable和Thread两个类的区别是什么?
学习线程了,但是不知道Runnable和Thread两个类的区别是什么?什么场合用Runnable?麻烦解释通俗一些!谢谢

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

他们分别什么时候才用到?在那些项目中?
作者: 星之钥匙    时间: 2015-4-21 17:27
多数时候使用继承吧,
作者: 猫猫虫    时间: 2015-4-21 18:18
星之钥匙 发表于 2015-4-21 17:27
多数时候使用继承吧,

搜索了网上的相关信息,有点明白的了!
Thread是多个线程分别完成自己的任务;
Runnable是多个线程共同完成一个任务,就像火车站共同售票一样的!
应该就是这样把
作者: 星之钥匙    时间: 2015-4-21 20:45
猫猫虫 发表于 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
解决java单继承的问题吧,用了接口
作者: kayaking    时间: 2015-4-21 23:33
原来如此
作者: 我想努力半年    时间: 2015-4-21 23:51
这两个没什么好纠结的吧,反正用到多线程的时候就实现Runnable接口 实现run方法就行
作者: 猫猫虫    时间: 2015-4-21 23:58
我想努力半年 发表于 2015-4-21 23:51
这两个没什么好纠结的吧,反正用到多线程的时候就实现Runnable接口 实现run方法就行 ...

线程处理的方式不一样吧!
作者: 一个土豆丶    时间: 2015-4-22 00:02
我也晕晕的  打算明天起来补习一下
作者: itheima_llt    时间: 2015-4-22 00:06
朋友你好,想和你聊天!
作者: 我想努力半年    时间: 2015-4-22 00:07
猫猫虫 发表于 2015-4-21 23:58
线程处理的方式不一样吧!

一样的,你把实现Runnable接口的子类对象扔进线程。然后它就会执行里面run方法的内容了
作者: 星之钥匙    时间: 2015-4-24 09:15
猫猫虫 发表于 2015-4-21 23:58
线程处理的方式不一样吧!

在使用Thread继承的时候,获取当前线程就可以直接用this,但是Runnable就不行,需要条用Thread的静态方法来获取。。。这是一点小注意
作者: 13699266500    时间: 2015-4-24 09:37
只要没有父类,用哪个其实是一样的
作者: 13699266500    时间: 2015-4-24 09:38
我也刚学习到线程,要不加个好友一起学习?QQ417628904
作者: 风雨共舟    时间: 2015-4-24 17:56
同样的困惑
作者: 尘埃123    时间: 2015-4-24 20:56
首先Runnable是一个接口,不是类。当碰到多个线程共享一个数据的时候,这时候有两种方法:1.是把数据定义成静态变量;2.就是实现Runnable接口,重写run方法,但是静态变量时与类共存亡的,在内存中时间太长,所以一般这时候都用实现接口的方式
作者: ~谢绝勾引~    时间: 2015-4-24 21:32
名字不同




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