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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 冯纪纲 中级黑马   /  2012-10-25 19:33  /  1509 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 冯纪纲 于 2012-11-7 22:38 编辑

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

3 个回复

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

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