黑马程序员技术交流社区

标题: 问一个关于线程的问题 [打印本页]

作者: yuhongzhen    时间: 2015-11-27 21:38
标题: 问一个关于线程的问题
     实现自定义线程有两个方法:通过继承Thread类和实现Runnable接口,为什么推荐使用实现Runnable接口这个方式呢?相对来说,实现接口代码比较复杂,而且也需要实例化Thread类。然而继承Thread类就方便很多,也很好理解和记忆。请大神指教,最好详细一点,本人比较爱钻牛角尖。

作者: anuo    时间: 2015-11-28 15:51
在实现一个任务用多个线程来做也可以用继承Thread类来实现只是比较麻烦,一般我们用实现Runnable接口来实现,简洁明了。
      
    大多数情况下,如果只想重写 run() 方法,而不重写其他 Thread 方法,那么应使用 Runnable 接口。这很重要,因为除非程序员打算修改或增强类的基本行为,否则不应为该类(Thread)创建子类。
作者: 八宝    时间: 2015-11-28 17:54
,, 真正创建线程还是Thread 类,
实现Runnable的类主要是把要被多线程操作的代码封装进去,使这一部分代码能够被多线程操作。
你看看Thread 类的API Thread类的构造函数有个可以接受Runnable的参数。
最大的好处是 Runnable是一个接口,实现它很简单 就一个方法run方法,反正继承Thread也是要覆盖这个方法。
但是继承的话就只能继承一个,接口可以实现N多个,并且还不耽误你继承其他的类。
还有一个好处是你要用多线程处理一个共享的数据的时候,就是多个线程处理一个数据的时候只需要创建多个线程就可以了,把要进行多线程操作的类implements Runnable 的对象传递给 Thread创建好的线程对象。就能让多个线程对这个类进行操作。不用创建多个Thread子类,那样就会产生多个Thread子类的资源。
除非是把Thread子类的被处理的资源拿出来单独封装,Thread只是处理被封装的资源也可以解决这个问题。

最主要的还是 java只能单继承 可以多实现, 所以一般能实现的先实现,必须继承的再继承,这样以后扩展会很方便。


作者: 八宝    时间: 2015-11-28 18:11
class A extends F类 implements Runnable ,B接口,C接口,D接口,什么你喜欢的其他接口  // 单继承 多实现
{
   run{要被多线程操作的部分}
}
创建 Thread 对象来运行 a 中的 run 只要把 a 传递给Thread就行,构造的时候传递给他,
Thread t1 = new Thread(a);
Thread t2 = new Thread(a);
这时候 t1 就是关联着 a 的多线程对象啦
然后t1.start(); 跑着的就是 a 中的 run 方法。

作者: Phy_zhang    时间: 2015-11-28 21:11
简单问题简单说:
如果是利用继承的来实现线程的话,该子类会出现局限性,继承的局限性
但是如果利用实现接口的方法实现线程的话,该类大大提高了拓展性

总之:别随随便便认爹,能拿就拿




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