当你想要实现多线程功能时,你应该使用Runnable接口。
当你想要实现多线程功能时,你应该使用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方法中执行代码?
当你处理自己的类层次结构时,你不想从Thread
类开始。 Thread
类是运行你的Runnable
的基础设施。还有更多,如Executor
等。 Thread
保持其特定于其API的状态。 Runnable
是一种方便(和适当的)方式,用于封装处理逻辑并将其与应该在其中执行的环境隔离开来。
那么,什么时候应该实现Runnable
接口呢?原因是Thread
类在处理自己的类层次结构时不是一个好的起点。解决方法是使用Runnable
接口来封装处理逻辑,并将其与应该执行的环境隔离开来。
通过使用Runnable
接口,我们可以将我们的处理逻辑与特定的线程实现分离开来。这样,我们可以在任何时候将我们的处理逻辑应用于不同的线程实现,而无需更改我们的处理逻辑。此外,我们还可以使用Executor
等其他功能来管理和控制线程的执行。
使用Runnable
接口还可以提高代码的可读性和可维护性。通过将处理逻辑封装在Runnable
实现中,我们可以更好地组织和管理我们的代码。
总之,当我们需要封装我们的处理逻辑并将其与特定的线程实现隔离开来时,我们应该实现Runnable
接口。这样做可以提高代码的可读性和可维护性,并使我们的代码更具灵活性和可扩展性。