当你想要实现多线程功能时,你应该使用Runnable接口。

13 浏览
0 Comments

当你想要实现多线程功能时,你应该使用Runnable接口。

我在阅读关于“实现Runnable与扩展Thread”的一些文章,我理解在Java中实现Runnable是首选,因为Java不支持多继承。我还阅读了一些文章,其中提到当你使用run()方法时,它只在当前线程中执行代码,而当你使用start()方法时,它会创建一个新的线程,这样会更好,但这取决于具体情况。但我仍然困惑的是,为什么你应该在类中实现Runnable?为什么需要这样做?或者扩展Thread?你可以创建匿名线程并在没有实现Runnable或任何东西的情况下启动它。

匿名线程的示例代码如下:

new Thread() {

public void run() {

System.out.print("Example");

}

}.start();

编辑:在一些答案和评论之后,我觉得我对此有了更清楚的理解。事实上,我不知道如果实现的Runnable接口的run方法不创建新线程的原因。但是你们中的许多人告诉我你可以使用类似这样的代码:

new Thread(new Runnable())

所以最后我想知道-这段代码是否创建了一个新的线程并在run方法中执行代码?

0
0 Comments

当你应该实现Runnable接口时的原因是为了直接使用Thread。如果你想直接使用Thread,你需要使用其中一种方式。你可以创建一个匿名线程并启动它,而无需实现Runnable或任何东西。你的代码是一个扩展Thread的匿名类。你也可以创建一个实现Runnable的匿名类。但是,你是否使用匿名类与实现Runnable或扩展Thread的机制来定义线程任务的问题是不相关的。至于这个问题,Jon Skeet的回答仍然非常相关。所以,当你想直接使用Thread时,你应该实现Runnable接口。

0
0 Comments

当你处理自己的类层次结构时,你不想从Thread类开始。 Thread类是运行你的Runnable的基础设施。还有更多,如Executor等。 Thread保持其特定于其API的状态。 Runnable是一种方便(和适当的)方式,用于封装处理逻辑并将其与应该在其中执行的环境隔离开来。

那么,什么时候应该实现Runnable接口呢?原因是Thread类在处理自己的类层次结构时不是一个好的起点。解决方法是使用Runnable接口来封装处理逻辑,并将其与应该执行的环境隔离开来。

通过使用Runnable接口,我们可以将我们的处理逻辑与特定的线程实现分离开来。这样,我们可以在任何时候将我们的处理逻辑应用于不同的线程实现,而无需更改我们的处理逻辑。此外,我们还可以使用Executor等其他功能来管理和控制线程的执行。

使用Runnable接口还可以提高代码的可读性和可维护性。通过将处理逻辑封装在Runnable实现中,我们可以更好地组织和管理我们的代码。

总之,当我们需要封装我们的处理逻辑并将其与特定的线程实现隔离开来时,我们应该实现Runnable接口。这样做可以提高代码的可读性和可维护性,并使我们的代码更具灵活性和可扩展性。

0
0 Comments

在大多数情况下,应该实现Runnable或Callable接口,而不是直接子类化Thread类。如果确实需要Thread类的特定行为,要么您知道自己在做什么并且有充分的理由需要不同的行为,要么您可能在做一些困扰的事情。

在处理多个线程及其交互和管理时,应该使用Executors和与其相关的工具,而不是自己编写代码。不再创建新的线程并管理其生命周期,因为这容易出错且难以管理,可以依赖于Executors并利用它们的功能。

总结起来,应该实现Runnable或Callable接口,而不是直接子类化Thread类,以及使用Executors和其相关工具来处理多线程和线程管理。

0