Java Thread的start和run方法的区别

如上面所说

了解Thread的start()和run()方法的区别,对于Java多线程的使用至关重要。start()方法启动线程,实现异步执行,而run()方法只是线程类的一个普通方法调用,并非启动线程。

当调用start()方法时,Java虚拟机会调用线程的run()方法,并使得该线程开始执行。start()方法的执行结果是两个线程并发地运行,当前线程从调用返回给start方法后,另一个线程开始执行其run()方法。多次启动一个线程是非法的,特别是当线程已经结束执行后,不能再重新启动。调用Thread类的start()方法启动线程后,此线程处于就绪状态,等待获得CPU时间片开始执行run()方法,run()方法的内容称为线程体,代表该线程需要执行的工作。run()方法运行结束,线程随即终止。

直接调用run()方法并不会启动线程,而是直接执行run()方法的代码,这在主线程中执行,没有达到通过多线程并行执行代码的目的。

总结起来,调用start()方法是启动线程的正确方式,而run()方法只是线程类中的一个普通方法调用,其执行是在主线程中,并非异步执行。

以下是代码实例,以直观展示start()方法与run()方法的区别:

通过start()启动线程,异步执行:

输出结果: pingpong

通过run()启动线程,同步执行:

输出结果:pongping

通过以上两个程序实例,很容易区分start()方法和run()方法的区别,即通过start()启动线程实现异步操作,而直接调用run()方法只是执行该方法内的代码,并没有启动新的线程。

线程状态说明,从初始状态、可运行状态、不可运行状态到消亡状态。新创建的线程处于初始状态,调用start()方法后进入可运行状态,当获得CPU时间片时进入运行状态。run()方法或main()方法结束后,线程进入终止状态。当线程调用sleep()方法或其它线程的join()方法时,会进入阻塞状态,等待资源或被唤醒。调用wait()方法后,线程会进入等待队列,释放所有资源,等待被唤醒。调用stop方法使线程进入消亡状态,但不推荐使用stop方法,可以通过run()方法内的条件来实现线程的停止。
温馨提示:答案为网友推荐,仅供参考
JAVA中thread的run和start方法有什么区别?
1. 在Java中,通过调用Thread类的`start()`方法来启动一个线程。这个方法不仅调用了线程的`run()`方法,而且还会执行一系列的初始化操作,确保线程可以正确地进入运行状态。如果直接调用`run()`方法,它仅仅会作为普通的方法被顺序执行,不会启动一个新的线程。2. `run()`方法是线程的入口点,它包含

java中Thread线程中的 start和run方法的区别
run方法是线程执行的入口,而start方法则是启动线程的指令。使用start方法调用run方法,可以使程序具备多线程并行处理的能力。这样可以提高程序的执行效率,特别是在处理耗时操作时,可以有效避免主线程的阻塞。为了更好地理解这两者的区别,可以将start方法比作是启动车辆的钥匙,而run方法则是车辆的引擎。只有...

Java Thread的start和run方法的区别
了解Thread的start()和run()方法的区别,对于Java多线程的使用至关重要。start()方法启动线程,实现异步执行,而run()方法只是线程类的一个普通方法调用,并非启动线程。当调用start()方法时,Java虚拟机会调用线程的run()方法,并使得该线程开始执行。start()方法的执行结果是两个线程并发地运行,当前线...

Java中Thread类的start和run的区别
在Java中,Thread类是处理多线程的核心。启动一个线程,我们需要调用start方法。start方法的作用是启动一个线程,它会调用线程对象的run方法。也就是说,start方法启动线程,而run方法则包含了线程执行的具体任务。要理解start和run的区别,可以想象成start是启动按钮,而run是按钮被按下后执行的动作。当线...

java线程中run 和start有什么区别
在Java线程中,start()和run()方法有着本质的区别。使用start()方法时,会立即返回,并启动一个新线程来执行run()方法。这意味着run()方法是在新线程中独立运行的。然而,直接调用run()方法则不会创建新的线程,而是直接在当前线程中执行run()方法,因此执行完毕后才会返回。基于这一点,使用start()...

Java多线程中start和run的区别
在Java多线程编程中,start和run是两个关键方法,但它们的功能和作用却截然不同。start方法用于启动线程,当调用start方法时,Java虚拟机会创建一个新的线程,并为该线程分配CPU时间片,进而执行该线程所关联类的run方法。这意味着run方法的执行是在一个新的线程中进行的。相比之下,run方法则是一个普通...

启动一个线程是用run()还是start()? 它们分别表示什么意思?
总结来说,start()方法是Java线程启动的正确途径,它可以创建一个新的线程并使其运行run()方法中的代码,而直接调用run()方法则无法达到同样的效果。正确的做法是通过调用start()方法来启动线程,让Java虚拟机管理线程的创建和运行,从而实现程序的并发执行。需要注意的是,start()方法只能被调用一次。

run() 与start()的区别
在Java编程语言中,Thread类用于创建和管理线程,start()方法是启动线程的关键步骤。通过调用start()方法,Java虚拟机会自动执行线程的run()方法,这是线程执行任务的具体实现。start()方法的作用在于初始化线程状态为运行状态,并且会为线程分配一个独立的栈空间,用于存放线程的状态信息、局部变量等。一旦...

Java线程中run和start方法的区别?
两种方法的区别\\x0d\\x0a 1) start:\\x0d\\x0a用\\x0d\\x0astart方法来启动线程,真正实现了多线程运行,这时无需等待run方法体代码执行完毕而直接继续执行下面的代码。通过调用Thread类的\\x0d\\x0astart()方法来启动一个线程,这时此线程处于就绪(可运行)状态,并没有运行,一旦得到cpu时间...

java中thread的start()和run()有何区别?
1、start()方法来启动线程,真正实现了多线程运行,这时无需等待。run方法体代码执行完毕而直接继续执行下面的代码;通过调用Thread类的start()方法来启动一个线程,这时此线程是处于就绪状态,并没有运行。通过Thread类调用方法run()来完成其运行操作的,这里方法run()称为线程体,它包含了要执行的这个...

相似回答
大家正在搜