🌟 欢迎来到我的博客! 🌈
💡 探索未知,分享知识 💫
深入理解Java线程:run
与 start
方法的区别
在Java的世界里,多线程编程是一个强大的工具,可以帮助我们高效地处理并行任务和复杂的处理流程。Thread
类是Java提供的用于操作线程的核心类,而理解其中的 run
和 start
方法对于掌握多线程编程至关
重要。
run
方法和 start
方法的基本区别
首先,我们需要明确 run
方法和 start
方法的基本职责:
run
方法:定义了线程的执行行为,即线程启动后需要执行的具体操作。start
方法:负责启动一个新的线程,并让这个新线程去执行run
方法中定义的代码。
这里的关键区别在于 : run 方法本身并不会创建或启动任何新的线程,它只是一个普通的方法调用。 而 start 方法才是真正触发线程并发执行的关键。 |
代码示例解析
为了更好地理解这两者的区别,让我们来看看下面这段简单的代码:
public class ThreadDemo5_3 {
public static void main(String[] args) {
Thread t = new Thread(() -> {
while (true) {
System.out.println("hello t");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
//t.run();
t.start(); // 启动新线程
System.out.println("hello main");
}
}
执行start()时,通过jconsole
来查看线程创建情况
不难发现会有线程
Thread_0
运行
执行run()时,通过jconsole
来查看线程创建情况
只有主线程
mian
在运行,并没有新的线程被创建
在第一个例子中,我们创建了一个匿名 Thread
对象 t
,并重写了它的 run
方法来定义线程的行为。接着,我们通过调用 t.start()
来启动这个线程。
当我们运行这段代码时,将会看到两件事几乎同时发生:
1. 新线程
t
开始执行并打印出 “hello t”,每隔一秒重复一次。
2. 主线程继续执行,打印出 “hello main”。
这个并发执行的效果,正是通过 `start` 方法启动新线程实现的。如果我们将 `t.start()` 替换为 `t.run()`,就会发现 "hello t" 不再是并行打印,而是会在 "hello main" 打印之后,主线程中按顺序打印。 |
总结
通过以上分析和示例,我们可以清楚地看到 run
方法和 start
方法之间的区别。start
方法是多线程编程的核心,它启动一个新线程并使得线程的运行与其他线程并行进行。而直接调用 run
方法则仅仅是在当前线程中顺序执行 run
方法中的代码,不会产生新的线程执行流。
掌握这两个方法的区别对于使用Java进行多线程编程非常重要,它可以帮助我们更好地设计程序结构,充分利用多线程带来的并行处理能力。