zoukankan      html  css  js  c++  java
  • 创建线程时如果既传入了runnable对象,又继承thread重写了run方法,会执行哪里的代码

    1 使用继承thread类,重写run方法,没有传入runable对象

       调用线程的start方法,做了什么事情。调用start方法后,start方法里面会调用一native方法start0,然后由虚拟机去调用线程的run方法

       由于线程的设计用到了模板方法这种设计模式

            new Thread() {
                
                @Override
                public void run() {
                    System.out.println("我是新的线程");
                }
                            
            }.start();

    重写之后,线程执行的就是我们自己的run方法,而在Thread类中的run方法就不会被执行

    这是Thread类的run方法

    在这个方法中判断target是否为null,不为null,才执行target的run方法

    2  既传入了runnable对象,又继承thread重写了run方法

            Runnable runnable = new Runnable() {
                
                @Override
                public void run() {
                    System.out.println("2  : "+Thread.currentThread().getName());
                    System.out.println("*************");
                }
            };
            
            new Thread(runnable) {
    
                @Override
                public void run() {
                    super.run();
                    System.out.println("1 : "+Thread.currentThread().getName());
                    System.out.println("##############");
                }
                
            }.start();

    注意:重写了run方法,就不会执行父类Thread的run方法,关键看在重写的run方法里,有没有调用super.run(),有调用就会执行传入的runnable中的run方法,没有调用就不会执行传入的runnable中的run方法

    但是他们始终只会是创建一个线程,因为打印的线程名是一样的

  • 相关阅读:
    ES集群性能调优链接汇总
    【转】dmesg 时间转换
    广师大笔记汉诺塔
    广师大python学习笔记求派的值
    155. 最小栈(c++)
    160. 相交链表(c++)
    论文 数据集总结
    论文阅读 总结 复习
    121. 买卖股票的最佳时机(c++)
    9. 回文数(c++)
  • 原文地址:https://www.cnblogs.com/moris5013/p/10694340.html
Copyright © 2011-2022 走看看