和包中的Callable和Supplier功能接口分別具有以下簽名-java.util.concurrentjava.util.functionpublic interface Callable<V> { V call() throws Exception;}public interface Supplier<T> { T get();}是否有一些特定的用例,其中每一個都比另一個更適合?
3 回答

翻閱古今
TA貢獻1780條經驗 獲得超5個贊
除了明顯的 Callable 拋出異常之外,區別在于語義。它們有不同的名稱,因為它們代表不同的事物。目的是讓代碼更容易理解。當您使用 Callable 時,您的接口選擇意味著該對象將由另一個線程執行。當您使用 Supplier 時,您暗示它只是一個向另一個組件提供數據的對象。

揚帆大魚
TA貢獻1799條經驗 獲得超9個贊
來龍去脈
對于Runnable
and Callable
,它們從 Java 6 開始就成為Executor
并發包的一部分。這意味著它們都準備好提交給 an并異步運行。這里Callable
有一個具體的用法。
而對于Runnable
(0 in 0 out)、Supplier
(0 in 1 out)、Consumer
(1 in 0 out) 和Function
(1 in 1 out),它們自 Java 8 以來一直是功能特性的一部分。所有這些都準備好了由 lambda 友好的東西處理,比如CompletableFuture
. 這里Supplier
只是指一個沒有任何輸入參數但有返回值的函數,這是高度抽象的。
0 in(參數) | 1 英寸(參數) | |
---|---|---|
0 出(返回) | Runnable | Consumer |
1 出(退回) | Supplier | Function |
添加回答
舉報
0/150
提交
取消