創建子線程的三種方式:
1.自定義線程任務類繼承線程類,以便繼承其功能,重寫其run方法(里面寫自己需要實現的功能),在main方法調用時創建其任務類實例化對象,然后調用對象的start方法(繼承自父類),即成功創建線程
優點:創建方式簡單直觀,缺點是自定義的線程任務類不再能繼承其他父類,無法直接獲取更加強大的功能
2.自定義線程任務類實現runnable接口,重寫其run方法,寫自己的功能代碼,然后在自己的主方法中創建thread線程類對象,將任務類對象交給其再調用線程的start方法即可啟動線程,(也可以直接匿名內部類的方式交給thread對象)
優點:可以繼承其他父類
缺點:較第一種方法較為麻煩
3.自定義線程任務類實現callable接口,重寫其call方法,里面寫自己需要的線程功能代碼,和要返回的數據,再把其對象交給FultureTask封裝成FultureTask對象(包裝成線程任務對象)再交給thread啟動,如何得到線程工作函數的返回結果? 調用自己創建的FultureTask對象的get方法即可得到,那么是如何確保程序運行完才得到結果,而不是得到中途的結果就返回了呢,原因是其會阻塞。直到線程執行完才會調用其get方法。
優點:對于需要有返回結果的線程任務可以選擇這種創建線程的方式。
缺點:創建流程過于麻煩。