Java 中 start() 和 run() 方法的区别2025年7月7日 | 阅读 5 分钟 多线程是 Java 的核心功能,它允许程序中的两个或多个部分并发执行,从而最大化 CPU 利用率。Java 提供了 Thread 类和 Runnable 接口来实现多线程。 start() 方法定义在 Thread 类中,而 run() 方法定义在 Runnable 接口中,并由 Thread 类实现。虽然它们乍一看可能很相似,但它们的作用不同。 Thread.start() 方法Thread.start() 方法用于启动新线程的执行。当我们调用 start() 方法时,JVM 会创建一个新的系统级线程。然后,系统级线程会在新创建的线程上内部调用 run() 方法。它实现了并发执行。 总的来说,我们可以说 start() 方法并发运行两个线程。当前线程(从 start() 方法调用返回的线程)和另一个线程(执行其 run() 方法的线程)。 语法 start() 方法负责:
示例:创建和启动线程示例编译并运行输出 Running thread through the start() method. 解释 在上面的程序中,start() 方法实际上启动了新线程。它在内部通过新的调用栈调用 run() 方法,从而实现了真正的多线程。 如果我们使用 t1.run() 而不是 t1.start(),它将在主线程上运行,而不是创建新线程。通过调用 start() 方法,Java 会创建一个新线程并将任务委托给您重写的 run() 方法。 Thread.run() 方法run() 方法包含要在线程中执行的代码。但是,如果直接调用它(即不使用 start() 方法),它就像一个普通方法一样工作,并且不会创建新线程。它在当前线程(通常是主线程)的上下文中执行,而没有多线程的好处。 语法 示例:创建和运行线程示例编译并运行输出 Thread 1: Count 1 Thread 12: Count 1 Thread 1: Count 2 Thread 12: Count 2 Thread 12: Count 3 Thread 12: Count 4 Thread 12: Count 5 Thread 1: Count 3 Thread 1: Count 4 Thread 1: Count 5 注意:您的输出可能会有所不同,因为程序每次运行时都会生成唯一的输出。解释 上面的程序只是从 1 计数到 5,并打印当前线程 ID 和计数。 在 main() 方法中,我们创建了 Main 类的两个实例 thread1 和 thread2。我们使用 start() 方法启动 thread1,并使用 run() 方法执行 thread2。thread1 是使用 start() 方法创建的,并在单独的线程中运行,其 run() 方法与主线程(由线程 ID 12 标识)并发执行。从交错的输出中可以看出并发执行。 thread2 是使用 run() 创建的,它只是在主线程的上下文中执行 run() 方法。因此,没有并发执行,thread2 的输出出现在 thread1 执行完毕之后。 输出说明了 Java 线程中 start() 和 run() 方法之间的关键区别:start() 创建一个新线程以进行并发执行,而 run() 在当前线程中顺序执行代码。 start() 和 run() 方法之间的区别
结论在 Java 中,在处理多线程时,理解 start() 和 run() 方法之间的区别至关重要。start() 方法用于启动新线程,并负责管理线程的生命周期。 另一方面,run() 方法定义了线程执行的实际代码。通过恰当地使用这些方法,我们可以连接多线程的力量来创建高效且响应迅速的 Java 应用程序。 Java start() 和 run() 方法选择题1. 关于 start() 方法,以下哪个陈述是正确的?
答案:B) 解释: start() 方法创建一个新线程并在该新线程上内部调用 run() 方法。 2. 如果直接调用 run() 方法而不是 start() 会发生什么?
答案:C) 解释: 直接调用 run() 就像一个普通的方法调用,它在当前线程中执行,而不是在新线程中执行。 3. 必须重写哪个方法来定义线程将执行的代码?
答案:D) 解释: 必须重写 run() 方法来定义线程启动时将执行的操作。 4. 如果在线程类中直接调用 run() 方法而不是 start(),输出会是什么?
答案:C) 解释: 直接调用 run() 只是像调用普通方法一样调用它,不会创建新线程。 5. 以下哪个最好地区分了 start() 和 run()?
答案:C) 解释: start() 创建一个新线程并在其中执行 run(),而单独的 run() 像普通方法一样执行,而不创建新线程。 下一主题Java 中的泛化与特化 |
在本节中,我们将了解什么是实际数,并创建 Java 程序来检查给定的数是否为实际数。实际数程序经常在 Java 编码面试和学术中被问到。实际数 一个数 X 被称为...
5 分钟阅读
Java 数据库连接 (JDBC) 是 Sun Microsystem 提供的一个应用程序编程接口 (API),Java 应用程序使用它与不同供应商的关系数据库进行通信。JDBC 和数据库驱动程序协同工作以访问电子表格和数据库。定义了...
阅读 4 分钟
? 用户体验在快节奏的软件开发领域至关重要。向您的 Java 程序添加一个设计精美的启动屏幕可以立即吸引用户的注意力。除了提供视觉上愉悦的开场白,启动屏幕还可以让用户放心,该程序正在...
阅读 4 分钟
Java 中的 Optional 类是一个显式的容器对象,它包含一个可能存在也可能不存在的非 null 值。它最初在 Java 8 中使用,用于提供一种更强大、更具成本效益且更安全的方式来处理可能...
阅读 4 分钟
在 Java 中,Future 是 java.util.concurrent 包下的一个接口。它用于表示异步计算的结果。该接口提供了检查计算是否完成、等待其完成以及检索计算结果的方法...
阅读 24 分钟
java.time.chrono.IsoChronology 类有一个 eras() 方法。使用 IsoChronology 类可以检索属于此特定 Iso 日历的所有时代。语法:public List eras() 参数:此方法不接受任何参数。返回值:属于...
阅读 2 分钟
这是谷歌、微软、TCS、Accenture 等著名 IT 公司通常在招聘面试中提出的问题。通过找出解决方案,可以评估面试者的逻辑推理、批判性思维和解决问题的能力。在本节中,我们将创建一个...
5 分钟阅读
? Java 是一种常用于创建各种应用程序的编程语言。接受用户输入是任何程序中最常见的任务之一。在本节中,我们将讨论如何在 Java 中接受日期。日期是每个...
阅读 4 分钟
Java 中的递归是指一个方法反复调用自身的过程。在编程语言中,如果一个程序允许我们在同一函数名内调用函数,则称为递归调用。它使代码更简洁...
阅读 3 分钟
交换两个变量是编程中的常见任务,通常涉及三个步骤:将一个变量的值存储到临时变量中,将第二个变量的值赋给第一个变量,然后将临时变量的值赋给第二个变量。然而,在某些编程语言中,...
阅读 4 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India