java - Java中的可调用与供应商接口
问题描述
和包中的Callable
和Supplier
功能接口分别具有以下签名-java.util.concurrent
java.util.function
public interface Callable<V> {
V call() throws Exception;
}
public interface Supplier<T> {
T get();
}
是否有一些特定的用例,它们中的每一个都比另一个更适合?
解决方案
从各自的文档中可以看出它们在用法上的区别:
返回结果并可能引发异常的任务。实现者定义了一个没有参数的方法,称为 call。
Callable 接口类似于 Runnable,因为两者都是 为实例可能由另一个线程执行的类设计的。
代表结果的提供者。
不要求每次调用供应商时都返回新的或不同的结果。
这意味着调用者Callable.call
期望抛出异常并将相应地处理异常。这对于诸如读取和写入文件之类的任务很有用,其中IOException
可以抛出多种类型的 s。Callable
也被设计为在另一个线程上运行。
Supplier
另一方面,很一般。它只是“提供一个价值”,仅此而已。
所以Callable
比Supplier
. 如果您不处理另一个线程或者您的任务不太可能抛出异常,Supplier
建议使用。
推荐阅读
- angular - Angular - 尝试模拟 router.events 时出错
- reactjs - “未知”类型的参数不能分配给“字符串”类型的参数,使用 array.includes()
- python - 不确定如何将字符串转换为可用的不和谐数据
- c - 如何在 C 中理解这样的语法
- azure-devops - 如何在 Azure devOps 中按特定计划运行特定脚本?
- swift - iOS 14.2,UIKit 编程标题未显示
- flutter - twitter登录页面后如何返回flutter应用程序
- r - 函数运算符检查第一个函数参数是否为空 df
- python - 如何从前端一次获取多个订单项目(单个 api 调用)并保存在单个订单 ID 中
- c# - Screaming Frog 和其他在线检查器返回 200 状态代码,但在从 c# 调试时返回 500