在 Java 中,创建线程的两种主要方式是通过继承 Thread
类和通过实现 Runnable
接口。下面是它们之间的主要区别:
1. 继承 Thread
类:
class MyThread extends Thread {
public void run() {
// 线程执行的代码
}
}
// 创建并启动线程
MyThread myThread = new MyThread();
myThread.start();
-
优点:
- 编写简单,因为直接继承
Thread
类,可以重写run
方法,将线程的执行逻辑放在其中。 - 可以直接调用
start
方法启动线程。
- 编写简单,因为直接继承
-
缺点:
- Java 不支持多继承,如果已经继承了其他类,则无法再使用这种方式创建线程。
- 线程的代码和线程的执行逻辑耦合在一起,不利于代码的组织和维护。
2. 实现 Runnable
接口:
class MyRunnable implements Runnable {
public void run() {
// 线程执行的代码
}
}
// 创建并启动线程
Thread myThread = new Thread(new MyRunnable());
myThread.start();
-
优点:
- 可以避免 Java 单继承的限制,因为类可以实现多个接口。
- 线程的执行逻辑独立于线程类,使得代码更清晰,适合多个线程共享同一个
Runnable
实例。
-
缺点:
- 相对于继承
Thread
类,使用Runnable
接口创建线程需要更多的代码,因为需要创建一个Thread
实例并传递Runnable
实例作为参数。 - 不能直接调用
start
方法,需要创建Thread
对象并传入Runnable
实例。
- 相对于继承
使用建议:
使用 Runnable
接口创建线程更灵活,适合多线程共享同一份资源的情况,可以提高代码的可维护性和复用性。而继承 Thread
类则更直观,适合简单的线程逻辑。在大多数情况下,推荐使用实现 Runnable
接口的方式创建线程。