和包中的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
提交
取消