创建和使用匿名 Runnable 类的最佳方式

2022-09-01 02:01:03

我想对 使用匿名类。有两种方法,但我不知道他们是否做同样的事情:Runnable

方法一:直接使用,然后调用:Runnablerun()

new Runnable() {
    @Override
    public void run() {
    }
}.run();

方法二:创建一个匿名并粘贴到 ,使用方法代替:RunnableThreadstart()run()

new Thread(new Runnable() {
    @Override
    public void run() {
    }
}).start();

我认为方法二显然是正确的。但是,我不知道它是否与方法一相同。我们可以直接在 上调用该方法吗?run()Runnable


答案 1

正如其他人所提到的,使用 Thread 类是正确的方法。但是,您还应该考虑使用 Javas Executors 框架来处理正在运行的线程。

Executors.newSingleThreadExecutor().execute(new Runnable() {
    @Override 
    public void run() {
        // code in here
    }
});

当然,直接使用Thread是可以的。但通常建议(或首选)使用该框架。让 Java 为您处理精细的细节。


答案 2

不,您通常不会直接在Runnable上调用,因为这样您不会获得后台线程。如果您不需要并且不需要后台线程,则可以直接调用,但否则,如果要创建一个后台线程并从其中运行Runnable,则必须创建一个新线程,然后将Runnable传入其构造函数,然后调用。run()run()start()

此外,还有其他方法可以完成此任务,包括使用执行器和执行器服务,您应该研究它的用法,因为它们提供了比使用裸骨 Thread 对象更多的灵活性和功能。

此外,您还需要了解 Future 接口和 FutureTasks的使用,它们与 Runnables 类似,只允许您在完成时返回结果。如果您使用过SwingWorker,那么您已经在没有意识到的情况下使用了Future界面。