学科分类
目录
Java基础

Runnable接口实现多线程

在上一节案例中,通过继承Thread类的方式实现了多线程,但这种方式有一定的局限性,因为Java只支持类的单继承,如果某个类已经继承了其他父类,就无法再继承Thread类来实现多线程。在这种情况下,就可以考虑通过实现Runnable接口的方式来实现多线程。

使用实现Runnable接口的方式来实现多线程的主要步骤如下:

(1)创建一个Runnable接口的实现类,同时重写接口中的run()方法;

(2)创建Runnable接口的实现类对象;

(3)使用Thread有参构造方法创建线程实例,并将Runnable接口的实现类的实例对象作为参数传入;

(4)调用线程实例的start()方法启动线程。

接下来通过一个案例来演示如何通过实现Runnable接口的方式来实现多线程,如文件1所示。

文件1 Example02.java

 1    //1、定义一个实现Runnable接口的实现类
 2    class MyThread2 implements Runnable {
 3        // 1.1、重写Runnable接口的run()方法
 4        public void run() {
 5            int i=0;
 6            while (i++ <5) { 
 7                System.out.println(Thread.currentThread().getName()
 8                                     +"的run()方法在运行");
 9            }
 10        }
 11    }
 12    public class Example02 {
 13        public static void main(String[] args) {
 14            // 2、创建Runnable接口实现类的实例对象
 15            MyThread2 myThread2 = new MyThread2();
 16            // 3、使用Thread(Runnable target, String name)构造方法创建线程对象
 17            Thread thread1 = new Thread(myThread2,"thread1");
 18            // 4、调用线程对象的start()方法启动线程
 19            thread1.start();
 20            // 创建并启动另一个线程thread2
 21            Thread thread2 = new Thread(myThread2,"thread2");
 22            thread2.start();
 23        }
 24    }

运行结果如图1所示。

图1 运行结果

文件1中,定义了一个实现Runnable接口的实现类MyThread2,并重写了run()方法,然后在main()方法中先后创建并启动了两个线程实例。在main()方法中创建线程实例时,先创建了Runnable接口的实现类对象myThread2,然后将myThread2作为Thread构造方法的参数来创建线程实例,最后同样通过start()方法启动了线程实例。

从图1可以看出,两个线程对象同样交互执行了各自重写的run()方法,并打印出对应的输出信息,这就说明案例通过实现Runnable接口的方式实现了多线程。

小提示:

Runnable接口中只有一个抽象的run()方法,那么该接口就属于JDK 8中定义的函数式接口,在使用时,可以直接通过Lambda表达式的方式更简洁的来实现线程实例。同样,在下一小节将要讲解的Callable接口也属于函数式接口。

点击此处
隐藏目录