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

1 使用线程的方式,继承thread类,重写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,没有调用就不会执行传入的runnable

始终只会是创建一个线程,打印的线程名是一样的

原文地址:https://www.cnblogs.com/moris5013/p/10694340.html

时间: 2024-08-05 08:38:04

创建线程时如果既传入了runnable对象,又继承thread重写了run方法,会执行的哪里的代码的相关文章

创建线程的第二种方式------实现Runnable接口的方式

package cn.itcast.demo16.Demo07.Runnable; /** * @author newcityman * @date 2019/7/22 - 23:17 */public class RunnableImpl implements Runnable { @Override public void run() { for (int i = 0; i <20 ; i++) { System.out.println(Thread.currentThread().getN

一起talk C栗子吧(第一百三十四回:C语言实例--创建线程时的内存细节)

各位看官们,大家好,上一回中咱们说的是"创建进程时的内存细节"的例子,这一回咱们说的例子是:创建线程时的内存细节.闲话休提,言归正转.让我们一起talk C栗子吧! 看官们,我们在前面章回中介绍过创建线程的例子,创建线程时使用的函数是pthread_create.今天我们一起说一下使用该函数创建线程时内存的一些细节问题.我们介绍的的重点还是内存布局中的四个分区.这点和前一回中介绍创建进程时内存细节的思路相同. 1.在主线程中使用pthread_create函数可以创建一个新线程,我们叫

实现Runnable接口和继承Thread类之间的区别

在Java语言中,我们都知道,有两种创建线程的方式,一中是使用Runnable接口,另一种是使用Thread类. public class DemoRunnable implements Runnable { public void run() { //Code } } //with a "new Thread(demoRunnable).start()" call public class DemoThread extends Thread { public DemoThread()

pthread_create()创建线程时传入多个参数

由于接口只定义了一个入参void *arg int pthread_create(pthread_t *tidp,const pthread_attr_t *attr, (void*)(*start_rtn)(void*),void *arg); 所以,如果想传参数,需要封装结构体,将多个参数通过一个结构体传入线程. typedef struct { FUNCPTR entry; /* 函数入口*/ void *arg[10]; /* 参数*/ }FUNC; void *start(void *

pthread_create()创建线程时传入多个參数

因为接口仅仅定义了一个入參void *arg int pthread_create(pthread_t *tidp,const pthread_attr_t *attr, (void*)(*start_rtn)(void*),void *arg); 所以,假设想传參数,须要封装结构体.将多个參数通过一个结构体传入线程. typedef struct { FUNCPTR entry; /* 函数入口*/ void *arg[10]; /* 參数*/ }FUNC; void *start(void

线程实现Runnable接口比继承Thread的优势

1.适合多个相同程序代码的线程去处理同一资源,把虚拟CPU(线程)同程序的代码.数据有效分离,较好地体现了面向对象的设计思想.2.可以避免由于java单继承特性带来的局限.3.增强了程序的健壮性,代码能够被多个线程共享,代码与数据是独立的.当多个线程的执行代码来自同一个类的实例时,继承它们共享相同的代码.多个线程可以操作相同的数据,与他们的代码无关当共享访问相同的对象时即共享相同的数据.当线程被构造时,需要的代码和数据通过一个对象作为构造函数实参传递进去,这个对象就是一个实现了Runnable接

创建线程的两种方式比较Thread VS Runnable

1.首先来说说创建线程的两种方式 一种方式是继承Thread类,并重写run()方法 1 public class MyThread extends Thread{ 2 @Override 3 public void run() { 4 // TODO Auto-generated method stub 5 6 } 7 } 8 //线程使用 9 MyThread mt = new MyThread(); //创建线程 10 mt.start(); //启动线程 另外一种方式是实现Runnabl

Java多线程--创建线程

1.创建线程 在Java中创建线程有两种方法:使用Thread类和使用Runnable接口.在使用Runnable接口时需要建立一个Thread实例.因此,无论是通过Thread类还是Runnable接口建立线程,都必须建立Thread类或它的子类的实例.Thread构造函数: public Thread( ); public Thread(Runnable target); public Thread(String name); public Thread(Runnable target, S

java创建线程两种方法

/* 进程:是一个正在执行中的程序 每一个进程执行都有执行顺序,该顺序是一个执行路径,或叫控制单元 线程:就是进程中一个独立的控制单元 线程在控制着进程的执行 一个进程至少包含一个线程 Java VM 启动时会有个进程java.exe 该进程中至少有一个线程复制java程序的执行,这个线程运行的代码存在于main方法中, 该线程称之为主线程 JVM启动不止一个线程,还有复制垃圾回收机制的线程 创建线程:(1)继承Thread类;复写run方法;创建对象,调用start方法 (2)实现Runnab