学习笔记1-通过实现Runnable接口创建新线程

创建线程的方法JAVA中常用的有两种。

1.通过继承Thread来实现
2.通过实现Runnable接口实现


下面对实现Runnable接口的实现做简单介绍

class MThread implements Runnable{

    @Override
    public void run() {
        for (int i = 0; i < 100; i++) {
            if (i % 2 == 0){
                System.out.println(i);
            }
        }
    }
}

通过实现Runnable接口来实现,在创建该进程时采用:

new Thread(new MThread()).start();

创建一个实现Runnable接口的类的实例对象,将对象作为参数传入new Thread中,并调用start()

众所周知,在调用start()方法时,start方法做两件事情:

  1. 创建一个线程
  2. 调用线程的run()

那么理论上调用的是new Thread的run(),为什么会调用了MThread当中的run()呢?!
看看Thread中run()的源码:

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

关于target的声明如下:

private Runnable target;

当执行到new Thread(new MThread())时,调用的是如下构造方法:

public Thread(Runnable target) {
        init(null, target, "Thread-" + nextThreadNum(), 0);
    }

忽略其他参数不看,不难看出在此构造方法中调用的init方法对于前面声明的Runnable target有一个赋值。再结合run()的源码就可以理解为什么会调用MThread中的run()。

全部评论

相关推荐

点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务