start 方法和 run 方法的主要区别是什么?

start()方法和run()方法都是Thread类的方法,它们的主要区别在于如何执行线程的任务:

  1. start()方法:当调用start()方法时,Java虚拟机会创建一个新的线程,并为该线程分配新的系统资源和调用栈,然后调用线程的run()方法。这样,run()方法就会在新的线程中执行,实现了多线程的目的。

  2. run()方法:如果直接调用线程的run()方法,那么run()方法将在当前线程中执行,而不会启动新的线程。这样,实际上你的程序将变成单线程,无法实现并发执行。

所以,如果你想创建并启动一个新的线程,你应该调用start()方法,而不是直接调用run()方法。以下是一个简单的例子,展示了start()方法和run()方法的区别:

public class StartRunExample {

    public static void main(String[] args) {
        Thread task = new Thread(() -> {
            System.out.println("Task is running in thread: " + Thread.currentThread().getName());
        });

        // 直接调用 run() 方法
        task.run(); // 输出:Task is running in thread: main

        // 使用 start() 方法启动线程
        task = new Thread(() -> {
            System.out.println("Task is running in thread: " + Thread.currentThread().getName());
        });
        task.start(); // 输出:Task is running in thread: Thread-0
    }
}

在这个例子中,我们创建了一个线程task,它的任务是打印当前线程的名称。当我们直接调用task.run()时,任务在主线程中执行。当我们调用task.start()时,任务在新的线程中执行。这就是start()方法和run()方法的主要区别。

发表评论

后才能评论