bra*_*orm 2 future callable executorservice java-8
public class myService {
@Autowired
ExecutorService executor;
public Result getServiceResult(Token token, Profile profile){
//validate token and profile
return getResult(token, profile).get();
}
private getResult (Token token, Profile profile){
Future<Result> = threadPoolExecutor.submit(
() -> myManager.createAccount(token, profile));
}
}
Run Code Online (Sandbox Code Playgroud)
这段代码在我目前的工作中运行良好.我无法理解如何threadPoolExecutor.submit通过"功能/方法"但不能通过callable?
我正在使用Java 8和Spring框架.
据我所知,你想知道为什么你似乎能够将"函数"传递给ThreadPoolExecutor.submit()采用a Callable而不是a的方法Function.
的解释是,该方法不能采取Function作为一个参数; 你所看到的是一个Callable传入,表达为一个lambda表达式(基本上是一个使用右箭头(->)语法的表达式).
如前一文档所述,lambda表达式用于提供一个接口的实现,该接口只有一个抽象方法,而不是方法的重写Object.这些通常是注释的FunctionalInterface,这可能是您出现混淆的地方,尽管这不是语言规范中概述的要求:
甲功能接口是具有(从方法预留一个抽象方法的接口
Object),并且因此代表一个单一的功能的合同.这种"单一"方法可以采用多个抽象方法的形式,从超级接口继承的覆盖等效签名; 在这种情况下,继承的方法在逻辑上代表一个方法.
在上面的示例中,根据返回类型myManager.createAccount(),您要么提供Callable(如果返回任何内容)的实现,要么Runnable是一个void方法:
() -> myManager.createAccount(token, profile)
Run Code Online (Sandbox Code Playgroud)
您的lambda与抽象call()或run()方法的方法签名匹配,因为它不带参数(如()箭头左侧所示),并返回void或某些结果.
| 归档时间: |
|
| 查看次数: |
2500 次 |
| 最近记录: |