学习笔记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方法做两件事情:
- 创建一个线程
- 调用线程的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()。