Java Thread的start和run方法的区别

通过start()启动线程,异步执行:输出结果: pingpong 通过run()启动线程,同步执行:输出结果:pongping 通过以上两个程序实例,很容易区分start()方法和run()方法的区别,即通过start()启动线程实现异步操作,而直接调用run()方法只是执行该方法内的代码,并没有启动新的线程。线程状态说明,从初始状态、...
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()方法内的条件来实现线程的停止。2024-10-28
mengvlog 阅读 8 次 更新于 2025-07-19 15:13:04 我来答关注问题0
檬味博客在线解答立即免费咨询

编程相关话题

Copyright © 2023 WWW.MENGVLOG.COM - 檬味博客
返回顶部