Cha*_*har 5 java concurrency asynchronous guava
是什么区别Futures.addCallBack(),并Futures.transform()在谷歌番石榴并发.
根据文件:
Futures.addCallBack():
addCallback(ListenableFuture<V> future, FutureCallback<? super V> callback)在Future的计算完成时,或者如果计算已经完成,立即注册单独的成功和失败回调.
Futures.transform():
transform(ListenableFuture<I> input, AsyncFunction<? super I,? extends O> function)返回一个新的ListenableFuture,其结果是从给定Future的结果异步派生的.
根据我的理解,addCallback()将在异步处理完成时注册成功或失败回调.在这种情况下,我们可以根据成功或失败条件处理输出(例如:日志记录,流量控制等.).并且transform()只返回异步对象.那么差异只是Callback?
AsyncFunction和Functionin有transform(ListenableFuture<I> input, Function/AsyncFunction <? super I,? extends O> function)什么区别?(AsyncFunction仅用于嵌套Futures.transform()?)我尝试了什么:
我尝试编写如下代码,这是否是一个好习惯.
public ListenableFuture<MyObject> doSomething() {
logger.info( "Entered in dosomething() Method." );
ListeningExecutorService executor =
MoreExecutors.listeningDecorator(Executors.newFixedThreadPool(50));
ListenableFuture<MyObject> myAsyncObject =
calculator.calculateSomething(input);
//internally calculator.calculateSomething() have multiple asynchronous
// calls and I am using Futures.transform(), without callback.
Futures.addCallback(myAsyncObject, new FutureCallback<MyObject>() {
public void onSuccess(MyObject result) {
logger.info( "Calculation Completed successfully." );
//TODO: check for success and log it.
}
public void onFailure(Throwable thrown) {
logErrorDetails(thrown);
}
}, executor);
executor.shutdown();
return myAsyncObject;
}
Run Code Online (Sandbox Code Playgroud)
好吧,您没有在问题中写出完整的方法签名
addCallback什么也不返回transform返回保存函数结果(如果输入成功)或原始输入失败(如果不成功)的 future。这允许使用流畅的语法进行链式转换。我没有使用过AsyncFunction,但我知道它们添加了一个级别的异步性,即,结果Future是另一个级别Future。
| 归档时间: |
|
| 查看次数: |
9208 次 |
| 最近记录: |