191 字
1 分钟
JUC-start()和run()的区别
start() 和 run() 最大的区别就一句话:start() 会真的开新线程;run() 只是普通方法调用,不会并发。
2026-02-18
-
-

Thread.start()和Thread.run()的区别#

start()run() 最大的区别就一句话:start() 会真的开新线程;run() 只是普通方法调用,不会并发。


1)run():普通方法调用(不新建线程)#

你直接调用 run(),代码就在当前线程里顺序执行:

Thread t = new Thread(() -> System.out.println(Thread.currentThread().getName()));
t.run(); // 还是 main 线程

输出通常是:main


2)start():启动新线程(并发执行)#

调用 start() 后,JVM 会创建一个新的操作系统线程,然后在新线程里回调你的 run()

Thread t = new Thread(() -> System.out.println(Thread.currentThread().getName()));
t.start(); // 新线程

输出通常是:Thread-0(或类似名字)

注意:start() 只是“让线程进入可运行状态”,什么时候真正执行由调度器决定,所以输出时序不固定。


这篇文章是否对你有帮助?

发现错误或想要改进这篇文章?

在 GitHub 上编辑此页
JUC-start()和run()的区别
作者
MeowRain
发布于
2026-02-18
许可协议
CC BY-NC-SA 4.0