启动线程的方式

start方法含义

  • 启动新线程
    通知JVM在合适的时候,启动新线程。不一定立刻执行,只是可以执行,具体看什么时候分配到cpu timeslice。
  • 准备工作
    让自己处于就绪状态:获取到除了cpu以外的其他资源(已经设置了栈、上下文、线程状态、pc寄存器)
  • 不能重复执行start方法
    在这里插入图片描述

在这里插入图片描述

run方法原理

run方法中封装着子线程的具体业务。但若是直接调用run方法,并不会启动一个新的线程,而是把run方法当做一个普通的方法在main线程执行。

总结

所以启动线程只能通过调用start方法间接调用run方法。具体是通过native方法start0()调用。
在这里插入图片描述

面试题

  • 一个线程两次调用start()方法会出现什么情况,为什么
    会报错:IllegalThreadStatusException。原因:在调用start方法的时候,会进行判断thread是不是没start过
    在这里插入图片描述
  • 既然start()方法会调用run()方法,那么为什么不直接调用run方法呢?
    启动线程是通过调用start方法,start方法调用native的方法start0()启动线程,然后通过start0()间接调用run方法。直接调用run方法不会开启新的线程,这时候run方法只是main线程中的一个普通的方法了。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值