執行緒池 execute與submit的區別

2021-10-01 21:18:18 字數 1174 閱讀 9450

在使用執行緒池的時候,看到execute()與submit()方法。都可以使用執行緒池執行乙個任務,但是兩者有什麼區別呢?

void execute(runnable command);
futuresubmit(callabletask);

futuresubmit(runnable task, t result);

future> submit(runnable task);

1 都可以執行任務

2 引數都支援runnable

1 submit支援接收返回值 詳見例1。

2 execute 任務裡面的異常必須捕獲,不能向上丟擲;submit支援的callable支援向上丟擲異常,需要由返回值.get()來進行接收。詳見例2。

public class executortest 

});future> result2 = executorservice.submit(new callable()

});try catch (interruptedexception e) catch (executionexception e) }}

thread2 sleep 5 seconds

thread1 sleep 10 seconds

thread1 return:true

thread2 return:false

finished

解釋:可以看到接收到了兩個執行緒的返回結果。利用thread.sleep來模擬耗時操作,直到兩個執行緒執行完畢之後,才會輸出finished。利用callable的返回阻塞,來等待這n個執行緒的執行完畢,然後將這n個執行緒的結果響應回去;其執行時間,基本上取決於最耗時的那個執行緒。

適用場景:在某些情況下,需要獲得一組執行緒的結果,給呼叫端。

而execute不支援向上丟擲異常,必須將異常捕獲。

執行緒池的submit和execute方法區別

1.接收的引數不一樣 2.submit 有返回值,而execute 沒有 例如,有個validation的task,希望該task執行完後告訴我它的執行結果,是成功還是失敗,然後繼續下面的操作。3.submit 可以進行exception處理 例如,如果task裡會丟擲checked或者unchec...

執行緒池的submit和execute方法區別

1 接收的引數不一樣 2 submit有返回值,而execute沒有 用到返回值的例子,比如說我有很多個做validation的task,我希望所有的task執行完,然後每個task告訴我它的執行結果,是成功還是失敗,如果是失敗,原因是什麼。然後我就可以把所有失敗的原因綜合起來發給呼叫者。個人覺得c...

執行緒池的submit和execute方法區別

執行緒池中的execute方法大家都不陌生,即開啟執行緒執行池中的任務。還有乙個方法submit也可以做到,它的功能是提交指定的任務去執行並且返回future物件,即執行的結果。下面簡要介紹一下兩者的三個區別 1 接收的引數不一樣 2 submit有返回值,而execute沒有 用到返回值的例子,比...