Java 线程的 run() 和 start() 有什么区别?有什么作用?

2023-12-19 21:31:27

Java 线程的 run() 和 start() 有什么区别?有什么作用?

在 Java 中,线程的 run()start() 是两个重要的方法,它们有不同的作用和用途。

run() 方法:

  1. 作用: run() 方法是线程类 Runnable 接口中定义的方法,用于定义线程的执行逻辑。
  2. 调用方式: 直接调用 run() 方法,并在当前线程中执行 run() 中定义的逻辑。
  3. 特点: 如果直接调用 run() 方法,那么代码仍然是在当前线程中执行,不会创建新的线程。
  4. 适用场景: 适用于单线程环境或者希望在当前线程中执行线程逻辑的情况。

start() 方法:

  1. 作用: start() 方法是 Thread 类中定义的方法,用于启动线程。
  2. 调用方式: 调用 start() 方法,由 JVM 创建一个新的线程,并在新线程中执行 run() 方法中定义的逻辑。
  3. 特点: 会创建新的线程,使得线程并行执行。
  4. 适用场景: 适用于需要并行执行的多线程环境。

代码示例:

以下是一个简单的示例,演示了 run()start() 的区别:

class MyThread extends Thread {
    public void run() {
        for (int i = 0; i < 5; i++) {
            System.out.println(Thread.currentThread().getId() + " Value " + i);
        }
    }
}

public class ThreadExample {
    public static void main(String args[]) {
        MyThread myThread1 = new MyThread();
        MyThread myThread2 = new MyThread();

        // 使用 run() 直接在当前线程中执行
        myThread1.run();
        myThread2.run();

        // 使用 start() 创建新线程并执行
        myThread1.start();
        myThread2.start();
    }
}

在上面的示例中,通过 run() 直接在 main 线程中执行,而通过 start() 创建新线程并执行 run() 方法。通过 start() 启动的线程会并行执行,输出结果可能交错。而通过 run() 直接调用的话,代码在当前线程中执行,不会并发。

文章来源:https://blog.csdn.net/sanmansan/article/details/135006974
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。