线程的 run() 和 start() 有什么区别?
时间: 2023-04-26 12:02:03 浏览: 44
线程的 run() 方法是线程的实际执行代码,当线程被启动后,run() 方法会被调用。而 start() 方法是启动线程的方法,它会创建一个新的线程并使其进入就绪状态,等待 CPU 调度执行。start() 方法调用后,会自动调用 run() 方法。因此,如果直接调用 run() 方法,那么该方法会在当前线程中执行,而不会创建新的线程。
相关问题
线程的 run()和 start()有什么区别?
线程的 run() 和 start() 有以下区别:
1. run() 方法是线程的实际执行代码,当线程被启动后,run() 方法会被调用。而 start() 方法是启动线程的方法,它会创建一个新的线程并使其进入就绪状态。
2. 直接调用 run() 方法并不会创建新的线程,而是在当前线程中执行 run() 方法的代码。而调用 start() 方法会创建新的线程并使其执行 run() 方法。
3. 一个线程只能被启动一次,如果尝试再次启动同一个线程,会抛出 IllegalThreadStateException 异常。而 run() 方法可以被多次调用。
4. start() 方法是异步的,即它会立即返回并使新线程开始执行。而 run() 方法是同步的,即它会一直执行直到方法执行完毕才返回。
总之,start() 方法是启动线程的方法,而 run() 方法是线程的实际执行代码。在使用线程时,应该调用 start() 方法来启动线程,而不是直接调用 run() 方法。
线程的 run0和 start0有什么区别
在Java中,Thread类是用于创建线程的基本类。Thread类中有两个关键的方法,即run()和start()。
run()方法是线程的主体,它包含线程要执行的代码。在启动一个新线程时,需要重写run()方法并在其中定义线程的行为。
start()方法是用于启动线程的方法。当调用start()方法时,线程进入就绪状态并等待系统分配CPU资源。一旦线程被分配到CPU资源,run()方法就会被调用。
在Thread类的内部,start()方法实际上会调用一个名为start0()的本地方法。start0()方法是一个私有方法,它负责启动线程并调用run()方法。
因此,run0()方法实际上是start0()方法中调用的方法。在Java中,run0()方法是一个本地方法,它由JVM实现并负责执行线程的主体代码。因此,run0()方法和start0()方法的区别在于它们的作用和调用方式不同。