创建多线程的第二种方式:实现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); } } }
结果: