![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=1739268064-oqQcvMWAG6Eniflcvbi6hYraoVVMl8eV-0-711e999539a084f6a058e22fec9d4a89)
FourMain类主方法,代码如下:
![](https://epubservercos.yuewen.com/DAFF96/31397728807979506/epubprivate/OEBPS/Images/Figure-P13_18592.jpg?sign=1739268064-zeebqunEN2oKRWThBSmePvwaK0231gse-0-9862ac590d96af9c735fd02bcf0e7698)
执行结果如下:
![](https://epubservercos.yuewen.com/DAFF96/31397728807979506/epubprivate/OEBPS/Images/Figure-P13_18593.jpg?sign=1739268064-C42njsnndjintTWwVKXn8pzsgmVVCV3w-0-c1e6cbcae731d8baea8b525cef9d763b)
注意:这里一定要理解线程启动后的概念。
主方法是Java虚拟机(JVM)的入口,主方法运行后会有3个线程启动。一个是默认的主线程,还有两个是通过线程对象.start()方法启动的线程,如图1-2所示。
![](https://epubservercos.yuewen.com/DAFF96/31397728807979506/epubprivate/OEBPS/Images/Figure-P14_9709.jpg?sign=1739268064-sQxGMyy0XAN7WsR8ec5t6ndmAWi9ezx8-0-dbe44d8d464af1f58a497385373bdcd0)
图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=1739268064-nUL7en9zuLGEsx9gOcFG37cXKzWgycf5-0-4b108d91622edeffbb5ad415db60f69e)
图1-3 Thread类start()核心源代码
![](https://epubservercos.yuewen.com/DAFF96/31397728807979506/epubprivate/OEBPS/Images/Figure-P14_9716.jpg?sign=1739268064-tkGp8D3fbkBCTeR26OwHs55H2v1WNuix-0-2421c37696cf1dee224e6590e45f84c4)
图1-4 官方Thread类run()方法
修改FourMain类,代码如下:
![](https://epubservercos.yuewen.com/DAFF96/31397728807979506/epubprivate/OEBPS/Images/Figure-P14_18595.jpg?sign=1739268064-pBLU3tvbapBxK0dTnjo8y0i0XbJ9b5U8-0-21c1cb6dbc84763142b31cece3d7523d)
执行结果如下:
![](https://epubservercos.yuewen.com/DAFF96/31397728807979506/epubprivate/OEBPS/Images/Figure-P15_18597.jpg?sign=1739268064-GtKzwu02HZ0dbWFpjS20i5URTWJwCRA7-0-b5c3324214a0e87c1a283838f94fe633)
注意:观察执行结果,并思考线程启动的方式。