如何启动匿名线程类

2022-08-31 15:45:23

我有以下代码片段:

public class A {
    public static void main(String[] arg) {
        new Thread() {
            public void run() {
                System.out.println("blah");
            }
        };
    }
}

在这里,如何在不创建线程类的实例的情况下调用线程的方法?start()


答案 1

您已经在创建 Thread 类的实例 - 只是没有对它执行任何操作。您甚至可以不使用局部变量进行调用:start()

new Thread()
{
    public void run() {
        System.out.println("blah");
    }
}.start();

...但就我个人而言,我通常会将其分配给局部变量,执行其他任何您想要操作(例如设置名称等),然后启动它:

Thread t = new Thread() {
    public void run() {
        System.out.println("blah");
    }
};
t.start();

答案 2

由于匿名类扩展了给定的类,因此您可以将它们存储在变量中。

例如。

Thread t = new Thread()
{
    public void run() {
        System.out.println("blah");
    }
};
t.start();

或者,您可以直接在立即创建的对象上调用 start 方法。

new Thread()
{
    public void run() {
        System.out.println("blah");
    }
}.start();
// similar to new Thread().start();

虽然就我个人而言,我总是建议创建一个Runnable的匿名实例而不是Thread,因为如果你不小心弄错了方法签名,编译器会警告你(对于一个匿名类,我认为它无论如何都会警告你,因为匿名类不能定义新的非私有方法)。

例如

new Thread(new Runnable()
{
    @Override
    public void run() {
        System.out.println("blah");
    }
}).start();