小夥伴們都知道Java實現多線程有兩種方式:
1、繼承Thread類,重寫run()方法;
2、實現Runnable接口,實現run()方法
實際上還有兩種方式:
3、實現Callable接口,實現call()方法;
4、通過線程池創建線程
接下來一個一個說明:
1、繼承Thread類,重寫run()方法
線程類:
測試類:
運行結果:
2、實現Runnable接口,實現run()方法
線程類:
測試類:
運行結果:
3、實現Callable接口,實現call()方法
線程類:
測試類:
運行結果:
註:task.get()功能是獲取子線程的返回值,在得到返回值之前會一直阻塞主線程main。從運行結果可以看到,「我是主線程!」在最後才輸出,原因就是子線程阻塞的。
比較Callable和Runnable:
a、Callable需要實現的方法是call(),而Runnable是run()
b、Callable有返回值,而Runnable沒有返回值
c、call()方法可以拋出異常,而run()方法是不能拋出異常,只能try catch捕獲
4、通過線程池創建線程
線程類:
測試類:
以後面試官再問,就不要說兩種了,說四種!沒準面試官從茫茫人海中一眼就相中你了,O(∩_∩)O哈哈~~
歡迎朋友們關注轉發點讚,謝謝~~