Runnable 接口
# Runnable 接口
讲讲用 Runnable 接口来创建线程,以及它和 Thread 的区别
# 创建线程方式之二
现在讲讲用第二种方式来创建线程。实现步骤:
- 创建实现 Runnable 接口的类
- 实现 run 方法
- 创建一个 Runnable 接口的实现类对象
- 创建 Thread 对象,在构造方法中传递 Runnable 接口的实现类对象
- 调用 start 方法
创建实现类:
package chapter200Thread;
public class RunnableImpl implements Runnable{
@Override
public void run() {
for (int i = 0; i < 20; i++){
System.out.println(Thread.currentThread().getName()+" "+i);
}
}
}
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
开启线程:
package chapter200Thread;
/**
* 创建多线程程序的第二种方式:实现 runnable
*/
public class Demo05Runnable {
public static void main(String[] args) {
RunnableImpl run = new RunnableImpl();
Thread t = new Thread(run);
t.start();
for (int i = 0; i < 20; i++){
System.out.println(Thread.currentThread().getName()+" "+i);
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
结果:交替执行其中一个线程
Thread-0 0
main 0
Thread-0 1
main 1
.....
1
2
3
4
5
2
3
4
5
# Thread 和 Runnable 的区别
如果一个类继承 Thread,则不适合资源共享。但是如果实现了 Runable 接口的话,则很容易的实现资源共享。
实现 Runnable 接口比继承 Thread 类所具有的优势:
- 适合多个相同的程序代码的线程去共享同一个资源。
- 可以避免 Java 中的单继承的局限性,如果继承了 Thread 类就不能继承其他类了。而如果实现了 Runnable 接口,还可以继承其他的类,实现其他的接口。
- 增加程序的健壮性,实现解耦操作,代码可以被多个线程共享,代码和线程独立。我们可以传递不同的 Runnable 实现类,从而执行不同的代码
- 线程池只能放入实现 Runable 或 Callable 类线程,不能直接放入继承 Thread 的类。
扩充:在 Java 中,每次程序运行至少启动 2 个线程。一个是 main 线程,一个是垃圾收集线程。因为每当使用 Java 命令执行一个类的时候,实际上都会启动一个 JVM,每一个 JVM 其实在就是在操作系统中启动了一个进程。
上次更新: 2024/10/1 19:22:42