多執行緒之callable詳解

2021-10-09 21:42:00 字數 875 閱讀 4034

面試有人會問:執行緒的實現方式有幾種?

很多人可能回答:2種,繼承thread類,實現runnable介面。

很多忽略了callable這種方式。

也許有人知道callable,也知道callable和runnable的區別是callable可以有返回值,也可以丟擲異常的特性,而runnable沒有。

這裡估計很多人懵逼,接下來我們就從原始碼層次講解這個問題。

futuretask futuretask=new futuretask(new callable() 

});futuretask.run();

system.out.println("獲取返回值: " + futuretask.get());

futuretask futuretask1=new futuretask(new callable()

});futuretask1.run();

system.out.println("獲取返回值1: " + futuretask1.get());

我們可以呼叫futuretask.get()方法去獲取執行緒非同步的執行結果,

這時候問題又來了

那如果2個執行緒一起執行,futuretask執行完了,futuretask1沒執行完會不會有問題。是不是futuretask1就拿不到結果了?

當然不會,futuretask.get()方法會保證執行緒在執行完之前是阻塞的。

我們看下futuretask原始碼

2個乙個有時間,乙個沒有時間,最終都是呼叫的awaitdone()這個方法,我們繼續看awaitdone

java多執行緒之Callable

callable和runnbale一樣代表著是執行緒任務,區別在於callable有返回值並且可以丟擲異常。建立並啟動有返回值的執行緒的步驟如下 建立callable介面的實現類,並實現call 方法,該call 方法將作為執行緒執行體,並且該call 方法有返回值。將callable例項傳入fut...

多執行緒Callable

runnable不支援異常處理,而callable可以異常處理 runnable不能獲取執行緒塊的返回值,而callable可以通過futruetask獲取返回值 建立2個執行緒,分別獲取userinfo資訊與stuinfo資訊 callableuserinfocallable new callab...

多執行緒 Callable實現

1 實現callable介面 定義類studentthread實現callable介面,其中dealstudentinfores為業務處理完返回的結果集dto,dealstudentinforesq為需要處理的學生資訊的dto dealstudentinforesq學生資訊dto data apim...