在使用執行緒池的時候,看到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沒有 用到返回值的例子,比...