黑马程序员技术交流社区
标题:
创建线程的疑惑
[打印本页]
作者:
冯纪纲
时间:
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