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