黑马程序员技术交流社区

标题: 创建线程的疑惑 [打印本页]

作者: 冯纪纲    时间: 2012-10-25 19:33
标题: 创建线程的疑惑
本帖最后由 冯纪纲 于 2012-11-7 22:38 编辑

创建线程既可以通过实现Runable,也可以通过派生Thead,
除了单继承的区别,这两种方法还有什么别的优缺点吗?


作者: up_    时间: 2012-10-25 19:46
实现Runable接口,复写run方法,然后创建实现类对象(这叫线程任务对象);
再创建Thread类对象(这叫线程对象),将线程任务对象当做参数传给线程对象,并调用start方法开启线程。
而继承Thread类,复写run方法,并创建对象,开启线程。这时,线程任务和线程对象绑定在一起。

实现Runable的好处在于将线程任务对象和线程对象分离,降低了其耦合性,便于维护。
作者: 崔政    时间: 2012-10-26 14:34
楼上加一
我再补充一点。
比如说,你创建一个类A要继承Thread,可是,类A还要继承类B,java中类无法多继承
但还要变成线程,怎么办?
这时候就要实现Runnable接口了。
这也是接口的好处。可以多实现
作者: 范贞亮    时间: 2012-10-26 14:43
补充:多数情况下我们都是优先考虑先从接口继承来实现线程的, 就像上楼说的,如果你要是确定你要用到Thread 中的关于线程的方法的话, 你就从Thread 继承好了!
另外:从接口实现的线程能更好的实现多线程的特点。比如你在实现接口的类上有一个要多个线程共享的成员变量x,然后你用
Thread t1 = new Thread(接口实现类对象);
Thread t1 = new Thread(接口实现类对象);
Thread t1 = new Thread(接口实现类对象);然后启动各个线程, 很明显接口实现类对象就只有一个, 被多个线程共享的 ,这样更x 就易被多个线程共享的了,不过要注意同步的问题。




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