线程的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异常。