实现步骤:
(1)建立一个继承于Thread类的子类
(2)重写Thread类的run()方法【线程执行的操做声明在run()中】
(3)建立Thread类的子类的对象
(4)经过此对象调用start()方法【①启动线程②调用当前线程对象的run方法】
代码 java
//(1)建立一个继承于Thread类的子类 class MyThread1 extends Thread{ public MyThread1(String name){ super(name); } //(2)重写Thread类的run()方法 @Override public void run() { System.out.println("第一种建立线程"); } } } public class ThreadTest{ public static void main(String[] args) { //(3)建立Thread类的子类的对象 MyThread1 t1=new MyThread1(); //(4)经过此对象调用start()方法 t1.start(); } }
实现步骤
(1)建立一个实现了Runnable接口的类
(2)该实现类 去实现Runnable中的抽象方法run()
(3)建立实现类的对象
(4)将此对象做为参数传递到Thread类的构造器中,建立 Thread类的对象
【Thread构造方法源码:public Thread(Runnable target)】
(5)经过Thread类的对象调用start()
代码 ide
//1.建立一个实现了Runnable接口的类 class MyThread2 implements Runnable{ @Override //2.实现类去实现Runnable中的抽象方法run() public void run() { System.out.println("第二种建立线程:实现Runnable接口"); } } public class ThreadTest1 { public static void main(String[] args) { //3.建立实现类的对象 MyThread2 m=new MyThread2(); // 4.将此对象做为参数传递到Thread类的构造器中,建立Thread类的对象 Thread thread = new Thread(m); // 5.经过Thread类的对象调用start() thread.start();
在前边说过start()方法的做用:
(1)启动线程
(2)调用当前线程的run()方法
那么问题来了:为何在使用Runnable接口建立线程的方法中,明明是Thread类的对象调用的start(),为何最终会是实现Runnable接口的类的run()方法被执行,而不是Thread类的run()方法被执行?
缘由下次再说,要去上课了
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
呼·······,我回来啦!
(1)首先来看一下Thread类的run()方法的源码:
说明:若是target非空,就执行target的run()方法,那么target又是什么?
(2)再来看一下Thread的一个构造方法Thread(Runnable target)
说明:target就是实现了Runnable接口的实现类的实例对象。
由于该对象非空,因此Thread的对象在调用了自身的run()方法,而后发现target对象非空,所以转而执行了实现类的run()方法。线程