通过实现 Runnable 接口编写多线程

2020-05-03 0 By admin

在 Java 开发中,可以通过创建一个实现了 Runnable 接口的类,达到多线程开发的目的。

一、Runnable 接口

接口 Runnable 只有一个抽象方法 run(),在实现该接口的类中需要重写该方法。
在线程运行时,实现了接口 Runnable 的对象需要由类 Thread 封装为线程实例,类 Thread 的构造方法可以接受接口 Runnable 的实例,然后线程实例通过 start() 方法启动线程。

1.1、与继承 Thread 类方法比较

优先选择:实现Runnable接口的方式。

  1. 使用继承类 Thread 的方法相对简单,比较直观,但是由于 Java 语言是单继承机制,使得一个类继承了类 Thread 之后不能再继承其他类。
  2. 通过实现 Runnable 接口的方法来创建线程时,虽然在生成线程实例时需要再通过 Thread 实例对 Runnable 实例进行封装;但定义时该类可以再继承其他类。
  3. Thread 类不支持线程重用。在处理多任务时,通常会创建多个线程,让一个线程执行一个任务。其实也可以创建几个线程,然后重用这些线程执行任务,相关可以学习线程池。

二、实现 Runnable接口实现多线程开发

通过创建一个实现了 Runnable 接口的类,实现多线程开发的具体过程如下:

  1. 创建一个实现了Runnable接口实现类。
  2. 实现类去实现Runnable中的抽象方法:run()。
  3. 创建实现类的对象。
  4. 将此对象作为参数传递到Thread类的构造器中,创建Thread类的对象。
  5. 通过Thread类的对象调用start()。
//1.创建一个实现了Runnable接口得类
class MThread implements Runnable{
  //2.实现类去实现Runnable中的抽象方法:run()
  @Override
  public void run() {
    for(int i = 0;i < 100;i++){
      if(i % 2 == 0){
        System.out.println(Thread.currentThread().getName() + ":" + i);
      }
    }
  }
}

public class ThreadTest1 {
  public static void main(String[] args) {
    //3.创建实现类的对象
    MThread m1 = new MThread();
    //4.将此对象作为参数传递到Thread类的构造器中,创建Thread类的对象
    Thread t1 = new Thread(m1);
    //5.通过Thread类的对象调用start():
    t1.start();
    //再启动一个线程
    Thread t2 = new Thread(m1);
    t2.setName("线程2");
    t2.start();
  }
}