gpt4 book ai didi

java - 当子类从线程父类扩展时,我们是否覆盖运行方法

转载 作者:搜寻专家 更新时间:2023-11-01 01:38:35 25 4
gpt4 key购买 nike

当我们继承 Thread 时,我们是否重写它的 run 方法?我们知道 Thread 类本身实现了 Runnable,但是 Runnable 类中并没有定义 run 方法的主体。

这是我脑海中的画面:

Runnable - 父类 - 它有一个 run 方法,主体是空的。

线程子级,

classA extends Thread- Child of Child,

当我们在 "classA"中定义 run() 方法时,我们是否覆盖了 Runnable 类中声明的 run 方法?感谢您的宝贵时间。

最佳答案

有两种方法可以定义线程的行为:子类化 Thread 类,或实现 Runnable 接口(interface)。

对于第一种方法,只需扩展 Thread 类并使用您自己的实现覆盖 run() 方法:

public class HelloThread extends Thread {
@Override
public void run() {
System.out.println("Hello from a thread!");
}
}

public class Main {
// main method just starts the thread
public static void main(String args[]) {
(new HelloThread()).start();
}
}

但是,实现 Thread 逻辑的首选方法是创建一个实现 Runnable 接口(interface)的类:

public class HelloRunnable implements Runnable {
@Override
public void run() {
System.out.println("Hello from a thread!");
}
}

public class Main {
// notice that we create a new Thread and pass it our custom Runnable
public static void main(String args[]) {
(new Thread(new HelloRunnable())).start();
}
}

首选实现 Runnable 的原因是它在线程行为和线程本身之间提供了明确的分离。例如,当使用线程池时,您实际上从未从头开始创建线程,您只需将一个 Runnable 传递给框架,它就会在一个可用的线程上为您执行它:

public class Main {
public static void main(String args[]) {
int poolSize = 5;
ExecutorService pool = Executors.newFixedThreadPool(poolSize);
pool.execute(new HelloRunnable());
}
}

进一步阅读:

关于java - 当子类从线程父类扩展时,我们是否覆盖运行方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4161400/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com