Java:thread的创建方式

Java的thread有两种创建方式:1、继承Thread,重写run函数;2、实现Runnable接口,用Runnable实例创建thread。你会选择哪一种?

继承

package chap15thread;

public class MyThread extends Thread {
    public static void main(String[] args) {
        MyThread myThread = new MyThread();
        myThread.start();
    }

    @Override
    public void run() {
        // blabla
    }
}

调用Thread实例的start方法启动线程。

接口

package chap15thread;

public class MyRunnable implements Runnable {

    public static void main(String[] args) {
        Thread thread = new Thread(new MyRunnable());
        thread.start();
    }

    @Override
    public void run() {
        // blabla
    }

}

首先创建Runnable实例,再用Runnable实例去创建thread。

选择

因为我们直接将测试代码写到了类里,二者看上去代码量相差不大。实际过程中,Runnable的方式会多一个步骤,先创建Runnable实例,再创建Thread实例。相比较下继承的方式会更为简单。

但在《Head First Java》这本书中,作者推荐使用接口的方式,原因有二。

1、Java不支持多继承。如果继承Thread的类还需要继承其他父类,那就必须使用接口的方式了。

2、接口的方式更符合设计模式。想想看我们为什么会用到继承,一个Dog继承了Animal,是因为Dog是一个特殊的Animal,在Animal上拓展了许多个性操作,如“品种”、“颜色”、“汪汪叫”和“撒娇”等等。但我们继承Thread的类是一个特殊的线程吗?并不是,它只是一个普通的线程,执行一个我们给予它的活儿而已,并没有比父类Thread多出个性化的东西。

关于Runnable接口方式创建thread,可以把Thread想象成一个工人,干活的人。而Runnable则是活儿本身,要干的活儿。我们要做的就是把活儿创建好,然后交给工人。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值