**问题:**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 构造函数来创建线程。

总结:

创建线程时,可以使用两种方式:

  1. 继承 Thread 类并重写 run() 方法。
  2. 实现 Runnable 接口并重写 run() 方法,然后将该对象作为参数传递给 Thread 构造函数。

选项 D 犯了错误,因为它试图将一个 InfoManage 对象(实现了 Runnable 接口)直接传递给 Thread 构造函数,而实际上 Thread 构造函数需要的是一个 Runnable 对象。

Java 线程创建:哪个代码片段错误?

原文地址: https://www.cveoy.top/t/topic/ozZl 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录