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线程中的一个普通的方法了。