黑马程序员技术交流社区

标题: 两种实现多线程的方法的选择困难症者进来看看。 [打印本页]

作者: halohoop    时间: 2015-7-30 22:33
标题: 两种实现多线程的方法的选择困难症者进来看看。
两种实现多线程的方法的选择困难症者进来看看。
我们都知道Java给我们提供了两种实现多线程的方法:
第一种:继承Thread类,覆盖run方法;
class Thread1 extends Thread
{
    public void run()
    {
        //线程任务代码
    }
}
Thread t1 = new Thread1();
t1.start();
—————————————————
第二种:实现Runnable接口,实现run方法,传参给Thread构造函数;
class Thread2Runnable implements Runnable
{
    public void run()
    {
        //线程任务代码
    }
}
Runnable t2r = new  Thread2Runnable();
Thread t2 = new Thread(t2r);
t2.start();
—————————————————
说说个人对这两方式选择的总结:
在Java中,是不支持多继承,如果一个类中代码需要多线程来完成而它又没有显式的继承其他类的情况下(这里指的是没有用extends关键字继承一个类),那么就可以使用继承Thread类的方式去实现多线程;
但是当你的类本身已经有显式继承一个类了,那就只能选择实现Runnable接口的方式了。
—————————————————
另外,个人更倾向于使用实现Runnable接口的,因为它比实现Thread类的方式更加能够体现“面向对象”的对象概念,怎么说呢?
以下就用两个匿名类来解释了:

①实现Runnable接口的方式:
new Thread(new Runnable(){
    public void run()
    {
        //线程任务代码
    }
}).start();

②继承Thread的方式:
new Thread(){
    public void run()
    {
        //线程任务代码
    }
}.start();

解析:我们都知道要执行的任务就是run方法中的内容,①中的任务它被封装到了一个Runnable的匿名子类对象中了,结果非常的明确,那就是线程这个对象去执行任务这个对象;
而②中任务被绑在了线程这个对象中,并没有体现出任务这个对象。
个人理解,不喜勿喷。
作者: halohoop    时间: 2015-7-31 16:52
自己顶。。。
作者: 野驴少东    时间: 2015-7-31 17:46
顶顶更健康
作者: 耀阳圣尊    时间: 2015-7-31 18:00
赞赞




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