官术网_书友最值得收藏!

1.4 線程啟動方式

Java線程的核心啟動方式只有一種,別的啟動方式都是基于核心啟動方式的一種包裝。

線程啟動方式有且只有一種,也就是通過Thread對象的start()方法啟動,代碼如下:

FourMain類主方法,代碼如下:

執行結果如下:


注意:這里一定要理解線程啟動后的概念。


主方法是Java虛擬機(JVM)的入口,主方法運行后會有3個線程啟動。一個是默認的主線程,還有兩個是通過線程對象.start()方法啟動的線程,如圖1-2所示。

圖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所示。

圖1-3 Thread類start()核心源代碼

圖1-4 官方Thread類run()方法

修改FourMain類,代碼如下:

執行結果如下:


注意:觀察執行結果,并思考線程啟動的方式。


主站蜘蛛池模板: 南开区| 六盘水市| 镇康县| 鄂托克前旗| 宜都市| 丰都县| 湘潭市| 涡阳县| 新乐市| 故城县| 南和县| 循化| 新余市| 长沙县| 东阿县| 于田县| 德化县| 天镇县| 南丹县| 新营市| 墨竹工卡县| 潍坊市| 库尔勒市| 南澳县| 泰兴市| 永宁县| 义马市| 贡觉县| 福安市| 中卫市| 玉田县| 成武县| 梅州市| 华阴市| 太湖县| 安康市| 镇江市| 太和县| 长沙市| 秦皇岛市| 响水县|