创建多线程的第二种方式:实现Runnable接口
采用java.lang.Runnable也是一种非常建的一种,我们只要重写run方法即可
步骤如下;
1定义Runnable接口的实现类,并重写该接口的run方法,该run方法的方法体同样是该线程的执行体
2创建Runable实现类实例,在创建Thread对象,构造方法传递Runnable接口的实现类对象(并以此实例作为Thread的target来创建Thread对象),该Thread对象才是真正的线程对象
3调用线程对象的start方法启动线程
7.继承Thread类和实现Runnable接口的区别
实现Runnable接口创建多线程程序的好处:
1避免了单继承的局限性
一个类只能继承一个类(一个人只能有一个亲爹),类继承了Thread就不能继承其他类了
实现了Runnable接口,还可以继承其他类,实现其他的接口
2增强了程序的扩展性,降低了程序的耦合性
实现Runnable接口的方式,把设置线程任务和开启新线程进行了分离
实现类中,重写run方法用来设置线程任务,创建Thread类对象,调用start方法开启新线程
首先,创建Runnable接口的实现类RunnableImp1:
package demo04Thread2;
//1创建Runnable接口的实现类
public class RunnableImp1 implements Runnable {
//2在实现类中重写Runnable接口的run方法
@Override
public void run() {
for (int i = 0; i <20 ; i++) {
System.out.println(Thread.currentThread().getName()+"---"+i);
}
}
}
在创建一个实现类RunnableImp2,开启不同的任务:
package demo04Thread2;
//1创建Runnable接口的实现类
public class RunnableImp2 implements Runnable {
//2在实现类中重写Runnable接口的run方法
@Override
public void run() {
for (int i = 0; i <20 ; i++) {
System.out.println("HellowWorld!");
}
}
}
再创建demRunnable类:
package demo04Thread2;
public class demRunnable {
public static void main(String[] args) {
//3创建一个Runnable接口的实现类对象
RunnableImp1 run=new RunnableImp1();
//4创建Thread类对象,构造方法中传递Runnable接口的实现类对象
Thread m=new Thread(run);//打印线程名称
m.start();
//设置线程任务和开启新线程进行分离,传递不同的实现类,实现不同的任务
Thread t=new Thread(new RunnableImp2());//打印HellowWorld
//5.调用Thread类中start方法,开启新线程run方法
t.start();
for (int i = 0; i <20 ; i++) {
System.out.println(Thread.currentThread().getName()+"---"+i);
}
}
}
结果: