📚 分类
多线程
🕵🏽‍♀️ 问题描述
线程的run()和start()有什么区别?
👨‍🏫 问题讲解
‌线程的run()和start()方法在Java多线程编程中有以下几个主要区别‌:

‌❒ 定义位置和用途‌

✔‌ run()方法‌是Thread类中的一个普通方法,它定义了线程的具体执行逻辑。线程的主体逻辑通常在run()方法中实现‌。
‌✔ start()方法‌用于启动一个新的线程。调用start()方法时,JVM会创建一个新的线程,并在新线程中调用run()方法‌。

❒ 执行方式和并发性

‌✔ 直接调用run()方法‌会在当前线程中顺序执行run()方法的内容,不会创建新的线程。
‌✔ 调用start()方法‌会创建一个新的线程,并在新线程中并行执行run()方法的内容,从而实现多线程的并发执行‌。
✔ start()方法是异步的,它会立即返回并开始执行新的线程,而不需要等待run()方法执行完毕‌。

❒ 线程状态和行为

‌✔ 调用start()方法‌时,新线程会进入就绪状态,等待JVM调度执行。调用start()方法后,主线程会继续执行其后续代码,而新线程会并行执行run()方法‌。
‌✔ 直接调用run()方法‌则在当前线程中执行run()方法的代码,不会创建新的线程,也不会实现多线程的并发执行‌

‌❒ 调用次数和异常处理‌

‌✔ run()方法‌可以多次调用,每次调用都会在当前线程中执行其内部的代码‌2。
✔‌ 每个线程对象只能调用一次start()方法‌。如果尝试多次调用同一个线程的start()方法,会抛出IllegalThreadStateException异常‌。
🏳️‍🌈 问题总结
✔ start: 开启新的线程,通过该线程异步执行run方法中所定义的逻辑代码,start方法只能被调用一次。
✔ run: 不会开启新的线程,可以被调用多次,同步执行。
📖 问题信息
📈 浏览次数:12 | 📅 更新时间:2025-12-04 01:48:24
📦 创建信息
🏷️ ID:98 | 📅 创建时间:2024-12-12 09:11:45