为了账号安全,请及时绑定邮箱和手机立即绑定

【备战春招】第5天-C01学习Java两种方法创建线程

标签:
Java
  • 课程名称:线程八大核心+Java并发原理精讲及企业级并发解决方案
  • 课程链接:https://coding.imooc.com/learn/list/362.html
  • 章节名称:
    • 第3章:实现多线程的正确方式
      • 3-2使用两种方法创建
  • 讲师姓名:悟空

课程内容

  • 思考题:同时使用上述的创建线程的两种方法会怎么样?

    • 两种创建线程方法

      • 继承Thread类,并重写run()方法
      • 实现Runnable接口,并实现run()方法
    • 把这个两种实现都写在一个类内会出现什么结果,是重写的run()方法被执行,还是实现的run()方法被执行?

      public static void main(String[] args) {
          new Thread(new Runnable() {
              @Override
              public void run() {
                  System.out.println("Runnable implements");
              }
          }) {
              @Override
              public void run() {
                  System.out.println("Thread extends");
              }
          }.start();
      }
      
    • 上述代码的写法,感觉两个方法都可以执行,正确判断执行结果,需要查看Thread类的源代码

      // Thread类run()方法源代码写法
      public void run() {
          if (target != null) {
              target.run();
          }
      }
      
    • 上面代码中target代表线程类对象,可以执行外部传入的线程对象

      • 而当把两种执行方法都写在一个类中,Thread类中的run()方法就被覆盖,即target即使被传入,但覆写的代码中,没有对这个对象的调用代码,也就是说,传入的线程对象不会被执行
      • 所以最终执行结果内容就为:Thread extends
  • 最精确的总结

    • 创建线程只有一种方式,那就是构造Thread类,而实现线程执行单元有两种方式
      1. 实现Runnable接口的run()方法,并将Runnable实例传给Thread
      2. 重写Threadrun()方法(继承Thread类)

学习心得

Java的本质与原理,就是理解和查看源代码书写的方式
两种方法
图片描述

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消