Java多线程是Java程序中常见的高级特性,使用多线程可以让程序同时执行多个任务,提高程序的效率。Java中多线程的实现方式主要有两种,一种是继承Thread类,一种是实现Runnable接口。下面我们来详细讲解这两种实现方式的比较。
继承Thread类的实现方式
继承Thread类是Java中自带多线程的一种实现方式,需要创建一个继承自Thread类的类,并重写其中的run方法。具体代码如下所示:
public class MyThread extends Thread {
@Override
public void run() {
// 线程要执行的代码
}
}
创建了一个继承自Thread类的MyThread类,并重写其中的run方法。接下来,可以用该类来创建多个线程,并启动执行。示例代码如下所示:
public class Main {
public static void main(String[] args) {
MyThread thread1 = new MyThread();
MyThread thread2 = new MyThread();
thread1.start();
thread2.start();
}
}
该示例中,我们创建了两个MyThread对象,并通过start方法启动了两个线程。
实现Runnable接口的实现方式
实现Runnable接口是Java中另一种实现多线程的方式,需要创建一个实现了Runnable接口的类,并实现其中的run方法。具体代码如下所示:
public class MyRunnable implements Runnable {
@Override
public void run() {
// 线程要执行的代码
}
}
创建了一个实现了Runnable接口的MyRunnable类,并实现了其中的run方法。接下来,可以用该类来创建多个线程,并启动执行。示例代码如下所示:
public class Main {
public static void main(String[] args) {
MyRunnable myRunnable = new MyRunnable();
Thread thread1 = new Thread(myRunnable);
Thread thread2 = new Thread(myRunnable);
thread1.start();
thread2.start();
}
}
该示例中,我们创建了一个MyRunnable对象,并通过Thread类来创建两个线程,并启动执行。
两种方式的比较
从上面的代码可以看出,两种实现方式的共同点都是重写run方法,实现自己的业务逻辑。不同点则是继承Thread类需要直接重写run方法,实现Runnable接口则需要先实现Runnable接口,并把该对象作为Thread类的构造参数来使用。
通常情况下,实现Runnable接口比继承Thread类更加灵活,因为Java中只允许单继承,如果已经继承了其他类,则不能继承Thread类。而实现Runnable接口则可以使用之后还能再继承其他类。另外,使用实现Runnable接口的方式,把线程本身和运行代码解耦,提高了代码的复用性。
综上所述,实现Runnable接口的方式更加优秀。
下面是两种方式的示例代码,分别实现了在多线程下输出数字1~10,并比较了两种方式的区别。
继承Thread类示例代码
public class MyThread extends Thread {
@Override
public void run() {
for (int i=1; i<=10; i++) {
System.out.println(Thread.currentThread().getName() + ": " + i);
}
}
}
public class Main {
public static void main(String[] args) {
MyThread thread1 = new MyThread();
MyThread thread2 = new MyThread();
thread1.start();
thread2.start();
}
}
实现Runnable接口示例代码
public class MyRunnable implements Runnable {
@Override
public void run() {
for (int i=1; i<=10; i++) {
System.out.println(Thread.currentThread().getName() + ": " + i);
}
}
}
public class Main {
public static void main(String[] args) {
MyRunnable myRunnable = new MyRunnable();
Thread thread1 = new Thread(myRunnable);
Thread thread2 = new Thread(myRunnable);
thread1.start();
thread2.start();
}
}
可以看出,两份代码逻辑相同,但是继承Thread类的实现方式需要继承Thread类,实现Runnable接口的实现方式则不需要。同时,继承Thread类的实现方式中,MyThread对象只能继承Thread类,不能再继承其他类;而使用实现Runnable接口的方式,则可以实现更加灵活的功能。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java多线程的实现方式比较(两种方式比较) - Python技术站