
简单来说,
run()
方法是线程要执行的任务,而
start()
方法才是真正启动线程的关键。直接调用
run()
只是普通的方法调用,不会创建新的线程。
线程的
run()
和
start()
区别,这可是面试常考点,也是理解多线程并发的基础。
为什么不能直接调用
run()
方法?
直接调用
run()
方法,相当于在当前线程(通常是
main
线程)中执行一个普通方法。这并不会创建新的线程,也就没有并发执行的效果。所有代码都在同一个线程中顺序执行,如果
run()
方法阻塞,整个程序都会卡住。
想象一下,你在厨房做饭,
run()
方法是炒菜,
start()
方法是请了另一个厨师来帮你炒菜。如果你自己直接炒菜(调用
run()
),那还是你一个人在忙活。但如果你请了另一个厨师(调用
start()
),你们就可以同时炒不同的菜,效率大大提高。
start()
方法做了什么?
start()
方法才是启动线程的正确方式。它会执行以下几个关键步骤:
向操作系统申请创建新的线程。 这才是真正创建并发的根本。将
run()
方法的调用委托给新创建的线程。 新线程会负责执行
run()
方法中的代码。线程进入就绪状态。 线程创建完成后,不会立即执行,而是等待 CPU 调度。
可以把
start()
方法想象成一个“启动器”,它负责创建新的线程,并让新线程开始执行
run()
方法中的任务。
线程池和
run()
方法的关系?
线程池是一种管理和复用线程的机制。线程池中的线程已经创建好,并等待执行任务。当我们向线程池提交任务时,线程池会选择一个空闲的线程来执行任务的
run()
方法。
线程池避免了频繁创建和销毁线程的开销,提高了程序的性能。它通过复用线程来执行不同的
run()
方法,从而实现并发执行。
python基础教程至60课_python入门基础资料 word版
python基础教程至60课,这篇教程开始就为大家介绍了,为什么学习python,python有什么优点等,确实让你想快点学习python。为什么用Python作为编程入门语言? 原因很简单。 每种语言都会有它的支持者和反对者。去Google一下“why python”,你会得到很多结果,诸如应用范围广泛、开源、社区活跃、丰富的库、跨平台等等等等,也可能找到不少对它的批评,格式死板、效率低、国内用的人很少之类。不过这些优缺点的权衡都是程序员们的烦恼。作为一个想要学点
1 查看详情
举个例子,一个Web服务器使用线程池来处理客户端请求。每个客户端请求就是一个任务,服务器将任务提交给线程池,线程池中的线程会执行处理请求的代码(相当于
run()
方法)。
如何正确使用
start()
和
run()
方法?
永远不要直接调用
run()
方法。 这是新手常犯的错误。通过调用
start()
方法来启动线程。 这是启动线程的唯一正确方式。在
run()
方法中编写线程要执行的任务。 这是线程的核心逻辑。
public class MyThread extends Thread { @Override public void run() { // 线程要执行的任务 System.out.println("线程 " + Thread.currentThread().getName() + " 正在执行..."); } public static void main(String[] args) { MyThread thread1 = new MyThread(); MyThread thread2 = new MyThread(); // 启动线程 thread1.start(); thread2.start(); }}
这段代码创建了两个线程
thread1
和
thread2
,并通过
start()
方法启动它们。每个线程都会执行
run()
方法中的代码,打印一条消息。
为什么
run()
方法可以被重写?
run()
方法是
Thread
类中的一个方法,它可以被重写,是因为它定义了线程要执行的任务。通过重写
run()
方法,我们可以自定义线程的行为。
Thread
类本身只提供了一个默认的
run()
方法,它什么也不做。我们需要继承
Thread
类,并重写
run()
方法,才能让线程执行我们想要的任务。
线程的生命周期和
run()
方法的关系?
线程的生命周期包括以下几个状态:
新建(New): 线程被创建,但尚未启动。就绪(Runnable): 线程可以被 CPU 调度执行。运行(Running): 线程正在被 CPU 执行。阻塞(Blocked): 线程因为某些原因暂停执行,例如等待 I/O 或锁。死亡(Dead): 线程执行完毕或发生异常而终止。
run()
方法的执行贯穿了线程的整个生命周期。当线程进入运行状态时,它会执行
run()
方法中的代码。当
run()
方法执行完毕或发生异常时,线程会进入死亡状态。
总而言之,理解
run()
和
start()
方法的区别是掌握多线程编程的关键。记住,
start()
方法负责启动线程,而
run()
方法负责定义线程要执行的任务。不要直接调用
run()
方法,而是通过
start()
方法来启动线程,才能实现真正的并发执行。
以上就是线程的 run()和 start()有什么区别?的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/946603.html
微信扫一扫
支付宝扫一扫