继承Thread类实现多线程
- 创建类继承Thread类:定义一个类,使其继承自
Thread
类。
class MyThread extends Thread {
@Override
public void run() {
// 线程执行的代码
System.out.println("MyThread is running.");
}
}
- 重写run方法:在子类中重写
run
方法,将线程要执行的代码放在该方法内。
- 创建线程实例并启动:在
main
方法或其他地方创建该子类的实例,并调用start
方法启动线程。
public class Main {
public static void main(String[] args) {
MyThread myThread = new MyThread();
myThread.start();
}
}
实现Runnable接口实现多线程
- 创建类实现Runnable接口:定义一个类,实现
Runnable
接口。
class MyRunnable implements Runnable {
@Override
public void run() {
// 线程执行的代码
System.out.println("MyRunnable is running.");
}
}
- 重写run方法:在实现类中重写
run
方法,编写线程执行逻辑。
- 创建Thread实例并启动:创建
Thread
类的实例,将实现Runnable
接口的类的实例作为参数传入Thread
构造函数,然后调用start
方法启动线程。
public class Main {
public static void main(String[] args) {
MyRunnable myRunnable = new MyRunnable();
Thread thread = new Thread(myRunnable);
thread.start();
}
}
两种方式的区别
- 继承性:
- 继承Thread类:一个类继承
Thread
类后,就不能再继承其他类,因为Java不支持多重继承,这在一定程度上限制了类的扩展性。
- 实现Runnable接口:一个类实现
Runnable
接口的同时,还可以继承其他类,保持了类继承体系的完整性,具有更好的扩展性。
- 资源共享:
- 继承Thread类:如果多个线程需要共享相同的资源,使用继承
Thread
类的方式不太方便,因为每个线程都是Thread
子类的独立实例,要共享资源需要采用额外的机制,如静态变量等。
- 实现Runnable接口:多个线程可以共享同一个实现
Runnable
接口的实例,方便实现资源共享,因为这些线程都是基于同一个Runnable
实例创建的。
- 设计理念:
- 继承Thread类:更侧重于将线程作为一个独立的个体来处理,适合于线程逻辑相对独立,不需要太多共享资源的场景。
- 实现Runnable接口:更强调将线程要执行的任务与线程本身分离,任务由实现
Runnable
接口的类来定义,线程只是负责执行这个任务,这种方式更符合面向对象的设计原则。