Java面试八股之start()和run()的区别

  1. start()和run()的区别

在Java中,run()方法和start()方法是与线程操作紧密相关的,两者之间存在本质的区别:

start()是Thread类的一个实例方法,它的主要作用是启动一个新的线程。当调用线程对象的start()方法时,Java虚拟机会为该线程分配必要的系统资源(如栈空间),并将其置于可运行状态(Runnable),等待CPU调度执行。简而言之,start()方法实际上启动了一个新线程并使其准备好执行,但并不意味着立即执行run()方法里的代码。

一旦线程获得CPU时间片,JVM会自动调用该线程的run()方法,执行线程要完成的任务。需要注意的是,start()方法只能被调用一次,多次调用会导致IllegalThreadStateException异常。

run()方法定义了线程执行的具体任务代码。它是每个线程类必须覆写的方法,用于放置需要并行处理的逻辑代码。

如果直接在主线程中调用某个线程对象的run()方法,那么run()中的代码将不会在新的线程中执行,而是作为普通方法在当前调用它的线程(通常是主线程)中顺序执行,这意味着没有实现多线程并行处理,程序仍按单线程的顺序执行路径进行。

总结来说,start()方法用于启动线程,让JVM负责后续的线程调度和run()方法的调用,从而实现多线程并发;而直接调用run()方法仅是执行一段代码,不涉及新线程的创建与调度,不会达到多线程并行处理的效果。

 如果大家需要视频版本的讲解,欢迎关注我的B站:

  • 8
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值