通过实现 Runnable 接口编写多线程
在 Java 开发中,可以通过创建一个实现了 Runnable 接口的类,达到多线程开发的目的。
一、Runnable 接口
接口 Runnable 只有一个抽象方法 run(),在实现该接口的类中需要重写该方法。
在线程运行时,实现了接口 Runnable 的对象需要由类 Thread 封装为线程实例,类 Thread 的构造方法可以接受接口 Runnable 的实例,然后线程实例通过 start() 方法启动线程。
1.1、与继承 Thread 类方法比较
优先选择:实现Runnable接口的方式。
- 使用继承类 Thread 的方法相对简单,比较直观,但是由于 Java 语言是单继承机制,使得一个类继承了类 Thread 之后不能再继承其他类。
- 通过实现 Runnable 接口的方法来创建线程时,虽然在生成线程实例时需要再通过 Thread 实例对 Runnable 实例进行封装;但定义时该类可以再继承其他类。
- Thread 类不支持线程重用。在处理多任务时,通常会创建多个线程,让一个线程执行一个任务。其实也可以创建几个线程,然后重用这些线程执行任务,相关可以学习线程池。
二、实现 Runnable接口实现多线程开发
通过创建一个实现了 Runnable 接口的类,实现多线程开发的具体过程如下:
- 创建一个实现了Runnable接口实现类。
- 实现类去实现Runnable中的抽象方法:run()。
- 创建实现类的对象。
- 将此对象作为参数传递到Thread类的构造器中,创建Thread类的对象。
- 通过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();
}
}