java中两种线程的创建方式区别

要说Java中的线程使用,有两种方式,一个是继承Thread类,直接调用子类的run()方法,

另一个是产生一个实现Runnable接口的类,

做为Thread类的直接创建入参,启动均调用start方法,前者会直接调用子类的run()实现逻辑,后者则是通过Thread中的run方法去调用Runnable中run()的实现。

我们知道Thread类实现了Runnable接口,看Thread源码就知道上面是怎么调用的。


init中会将 target赋值给成员变量target,

start()所调用的run方法的代码是

@Override
public void run() {
    if (target != null) {
        target.run();
    }
}
got it ?

当然,我从这里看到了两种编程思想 继承(inheritance) 和 组合(composition),后者实现了类与类间的松耦合(coupling)

另外,采用Runnable参数方式,意味着多个线程会共享Runnable实现类中定义的一些信息(同一Runnable实例),会有线程安全问题。

 对于无法继承则可以采用Runnable方式。

如果是单纯的创建线程,非Runnable方式的资源开销要小些。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值