Java Runnable 接口

17 Mar 2025 | 4 分钟阅读

Java Runnable 接口用于在并发线程上执行代码。它是一个接口,如果希望某个类的实例由线程执行,就可以实现该接口。

Runnable 接口有一个未定义的、返回类型为 void 且不接受任何参数的 run() 方法。run() 方法的摘要如下:

方法描述
public void run()此方法不接受任何参数。当用于创建线程的实现 Runnable 类的对象被使用时,run 方法将在独立执行的线程中被调用。

Runnable 接口为希望在激活时执行代码的类的实例提供了一套标准规则。Runnable 接口最常见的用例是我们只想重写 run 方法。当通过实现 Runnable 的类的对象启动线程时,它将在独立执行的线程中调用 run 方法。

实现 Runnable 的类可以在不继承 Thread 的情况下在另一个线程上运行,因为它实例化了一个 Thread 实例并将自身作为目标传递。这一点很重要,因为除非有意修改或增强类的基本行为,否则不应继承类。

Runnable 类广泛用于网络编程,因为每个线程都代表一个独立的控制流。在多线程编程中也使用 Runnable 类。此接口位于 java.lang 包中。


实现 Runnable

通过实现 Runnable 来创建线程是最简单的方法。可以通过实现 Runnable 来创建任何对象的线程。要实现 Runnable,只需实现 run 方法即可。

public void run()

在此方法中,我们有想要在并发线程上执行的代码。在此方法中,我们可以像主线程一样使用变量、实例化类并执行操作。线程将一直运行,直到该方法返回。run 方法为新线程建立了入口点。


如何使用 Runnable 接口创建线程

要使用 runnable 创建线程,请使用以下代码-

线程将执行在其参数中传递的 Runnable 对象 run() 方法中提到的代码。


使用 runnable 的简单线程示例

输出

Java Runnable Interface

在网络编程中使用 Runnable 类

Runnable 类用于执行多线程编程,尤其是在服务器端,因为服务器可能接收来自不同客户端的多个请求。为了快速且资源高效地处理这种情况,我们使用多线程编程。

使用 Runnable 的网络程序示例-

以下程序显示了一个服务器程序,该程序创建一个线程,然后创建一个套接字并等待客户端连接到它并请求输入字符串-

在此程序中,我们在一个线程中为客户端创建一个套接字。通常,在服务器中为不同的客户端请求创建不同的线程。然而,如果编译器的每线程内存控制能力很差,那么为每个客户端创建单个线程并不是一个好习惯。


Thread 与 Runnable 的区别

Java Runnable Interface

Thread 类和 Runnable 接口在性能、内存使用和组成方面存在一些差异。

  • 通过扩展 Thread,存在额外的开销,即它们会消耗过多的或间接的内存、计算时间或其他资源。
  • 由于在 Java 中我们只能扩展一个类,因此如果我们扩展 Thread 类,那么我们将无法扩展任何其他类。这就是为什么我们应该实现 Runnable 接口来创建线程。
  • Runnable 使代码更灵活,因为如果我们扩展一个线程,那么我们的代码将仅存在于一个线程中,而在 runnable 的情况下,您可以将其传递到各种执行器服务,或传递到单线程环境。
  • 如果实现 Runnable 接口,代码的维护会更容易。

下一个主题Java 教程