Java 线程创建:哪个代码片段错误?
**问题:**Jerry 想要实现一个线程对象,以下哪个代码片段会出错?
选项:
A
class InfoManage extends Thread {
public static void main(String[] args) {
InfoManage im = new InfoManage();
im.start();
}
}
B
class InfoManage implements Runnable {
@Override
public void run() {
System.out.println("running");
}
public static void main(String[] args) {
InfoManage im = new InfoManage();
Thread t = new Thread(im);
t.start();
}
}
C
class InfoManage {
public static void main(String[] args) {
Thread t = new Thread(new Runnable() {
@Override
public void run() {
System.out.println("running");
}
});
t.start();
}
}
D
class InfoManage implements Runnable {
@Override
public void run() {
System.out.println("running");
}
public static void main(String[] args) {
InfoManage im = new InfoManage();
Thread t = new Thread(im);
t.start();
}
}
正确答案:D
解释:
选项 D 中,InfoManage 类实现了 Runnable 接口并重写了 run() 方法,但在 main() 方法中使用了 InfoManage 类的实例来创建 Thread 对象,而不是使用实现了 Runnable 接口的实例对象。因此,这段代码会引起编译错误。
其他选项都是正确的。
- 选项 A 中,
InfoManage类继承了Thread类并实现了run()方法,在main()方法中使用该类的实例来启动线程。 - 选项 B 中,
InfoManage类没有实现Runnable接口或继承Thread类,但在main()方法中创建了一个实现了Runnable接口的匿名内部类,并将其作为参数传递给Thread构造函数来创建线程。 - 选项 C 中,
InfoManage类没有实现Runnable接口或继承Thread类,但在main()方法中创建了一个实现了Runnable接口的对象,并将其作为参数传递给Thread构造函数来创建线程。
总结:
创建线程时,可以使用两种方式:
- 继承
Thread类并重写run()方法。 - 实现
Runnable接口并重写run()方法,然后将该对象作为参数传递给Thread构造函数。
选项 D 犯了错误,因为它试图将一个 InfoManage 对象(实现了 Runnable 接口)直接传递给 Thread 构造函数,而实际上 Thread 构造函数需要的是一个 Runnable 对象。
原文地址: https://www.cveoy.top/t/topic/ozZl 著作权归作者所有。请勿转载和采集!