首页 >Java >java教程 >为什么'Thread.start()”对于 Java 中真正的多线程至关重要?

为什么'Thread.start()”对于 Java 中真正的多线程至关重要?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-11-15 09:15:17353浏览

Why is `Thread.start()` essential for true multithreading in Java?

理解 Thread.start() 和 Thread.run() 之间的区别

在 Java 中使用多线程时,程序员会遇到两个关键问题方法:Thread.start() 和 Thread.run()。虽然它们的名称可能暗示类似的功能,但它们的用途却截然不同。

这些方法有什么作用?

Thread.start():

  • 初始化一个新线程并在单独的线程中执行 run() 方法
  • 分配系统资源并设置线程的执行环境。
  • 控制权转移到 JVM 来管理线程调度和执行。

Thread.run():

  • 直接调用run()方法在当前线程内。
  • 不创建新线程;相反,它执行当前执行线程中的代码。
  • 没有为线程管理分配系统资源。

为什么我们不能直接调用 Thread.run ()?

如果 Thread.run() 也执行 run() 方法,为什么我们不能简单地调用这个方法而不是线程.start()?原因在于多线程提供的隔离和独立执行。

调用 Thread.run() 会在当前线程中执行代码,而不是在单独的线程中执行。这意味着 run() 方法中的任何代码仍然与当前线程中的资源交互并影响资源。这不是多线程的预期目的,多线程允许并发执行任务。

说明差异的示例:

考虑以下内容代码:

public class ThreadExample {
    public static void main(String[] args) {
        Thread t1 = new Thread(() -> System.out.println("Thread 1"));
        Thread t2 = new Thread(() -> System.out.println("Thread 2"));

        // Here, we call Thread.start() and Thread.run():
        t1.start();  // Starts Thread 1 in a separate thread
        t2.run();    // Executes Thread 2 in the current thread

        System.out.println("Main Thread");
    }
}

输出:

Thread 1
Main Thread

在 t1 上调用 Thread.start() 创建一个新线程并在该线程中执行 run() 方法,允许它打印“线程 1”。另一方面,在 t2 上调用 Thread.run() 会在当前(即主)线程中执行 run() 方法,从而绕过新线程的创建。这会导致“线程 2”不会被打印,因为它永远不会在单独的线程中执行。

以上是为什么'Thread.start()”对于 Java 中真正的多线程至关重要?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn