Nik*_*Nik 19 java concurrency guava
我有一些代码向另一个线程提交请求,该线程可能会也可能不会将该请求提交给另一个线程.这产生了一种返回类型Future<Future<T>>.是否有一些非令人发指的方式立即将其转变为Future<T>等待整个未来链条的完成?
我已经在使用Guava库来处理其他有趣的并发内容,并且作为Google Collections的替代品并且它运行良好,但我似乎无法找到适合这种情况的东西.
使用番石榴库的另一种可能的实现方法要简单得多.
import java.util.concurrent.*;
import com.google.common.util.concurrent.*;
import com.google.common.base.*;
public class FFutures {
public <T> Future<T> flatten(Future<Future<T>> future) {
return Futures.chain(Futures.makeListenable(future), new Function<Future<T>, ListenableFuture<T>>() {
public ListenableFuture<T> apply(Future<T> f) {
return Futures.makeListenable(f);
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
Guava 13.0增加Futures.dereference了这个.它需要一个ListenableFuture<ListenableFuture>而不是一个平原Future<Future>.(在普通平台上操作Future需要makeListenable调用,每个调用都需要一个专用线程用于任务的生命周期(通过方法的新名称更清楚JdkFutureAdapters.listenInPoolThread).)
| 归档时间: |
|
| 查看次数: |
3571 次 |
| 最近记录: |