![Java多线程并发体系实战(微课视频版)](https://wfqqreader-1252317822.image.myqcloud.com/cover/362/52842362/b_52842362.jpg)
上QQ阅读APP看书,第一时间看更新
1.4 线程启动方式
Java线程的核心启动方式只有一种,别的启动方式都是基于核心启动方式的一种包装。
线程启动方式有且只有一种,也就是通过Thread对象的start()方法启动,代码如下:
![](https://epubservercos.yuewen.com/DAFF96/31397728807979506/epubprivate/OEBPS/Images/Figure-P12_18588.jpg?sign=1739666877-3qK0ryWLvBNHmOJIga3koLjXTwCSY4y3-0-6fa517d40b6f8d98d096c105a30dd990)
FourMain类主方法,代码如下:
![](https://epubservercos.yuewen.com/DAFF96/31397728807979506/epubprivate/OEBPS/Images/Figure-P13_18592.jpg?sign=1739666877-j48C5TY3X7sUeuMInG06d9JcdM9Aa2hv-0-7122d806b9924230d70fa37f3056a09f)
执行结果如下:
![](https://epubservercos.yuewen.com/DAFF96/31397728807979506/epubprivate/OEBPS/Images/Figure-P13_18593.jpg?sign=1739666877-8RccwiZrhOkSNedRHfneXZv3NaUJCpXy-0-effc504b5fa8eae854a01198e10dbe5b)
注意:这里一定要理解线程启动后的概念。
主方法是Java虚拟机(JVM)的入口,主方法运行后会有3个线程启动。一个是默认的主线程,还有两个是通过线程对象.start()方法启动的线程,如图1-2所示。
![](https://epubservercos.yuewen.com/DAFF96/31397728807979506/epubprivate/OEBPS/Images/Figure-P14_9709.jpg?sign=1739666877-Ecq2OMhbuwgU0J9ANnYLdlp3tbzh5afa-0-98869d8b6014858078bc6a8a8d89d00c)
图1-2 线程启动
Thread类start()方法的源代码删减版,只保留了核心的内容,如图1-3所示。线程对象start()方法执行后,最终会调用底层的start0()方法,start0()方法是由native修饰的,是Java虚拟机底层的方法,start0()方法执行后,最终会启动线程并回调此线程对象的run()方法。
线程对象的两种创建方式造就了run()方法执行后得到两种可能性。一种是继承自Thread类的,相当于直接重写了run()方法,另外一种就是实现了Runnable接口的,最终通过回调target.run()方法,回调到Runnable接口实现类的run()方法。
不管使用线程创建方式中的哪一种,最终都会回调指定对象的run()方法,所以在前面实现类时都要重写run()方法,如图1-4所示。
![](https://epubservercos.yuewen.com/DAFF96/31397728807979506/epubprivate/OEBPS/Images/Figure-P14_9713.jpg?sign=1739666877-Mk4Y91NeNEwM2pfwyIywyg84ggm0z7ew-0-37dcb95ca9503ddfc6622b4d043b5cb0)
图1-3 Thread类start()核心源代码
![](https://epubservercos.yuewen.com/DAFF96/31397728807979506/epubprivate/OEBPS/Images/Figure-P14_9716.jpg?sign=1739666877-TsmDNRHhzXFnD1LTgRxMfB5U8ht2vBk0-0-162f65ff8ff517f12f9276fdaee1390a)
图1-4 官方Thread类run()方法
修改FourMain类,代码如下:
![](https://epubservercos.yuewen.com/DAFF96/31397728807979506/epubprivate/OEBPS/Images/Figure-P14_18595.jpg?sign=1739666877-mnPeq5wvckF7Ofpe659DODFCrJD35Aob-0-a918ca94f46e97cb5c4e33e2d99eae84)
执行结果如下:
![](https://epubservercos.yuewen.com/DAFF96/31397728807979506/epubprivate/OEBPS/Images/Figure-P15_18597.jpg?sign=1739666877-nw4jckaewVQY3fMUooMetcEbNuQdEqWp-0-278a85919232ac3ec9aa0eda6b80fb6f)
注意:观察执行结果,并思考线程启动的方式。