官方解释地址:点击打开链接
可以使用 ListenableFuture 来代替JDK 的Future。 ListenableFuture 可以监测 task 的状态,success or fail ,继而执行自定义的任务。
例子:
ListeningExecutorService service = MoreExecutors.listeningDecorator(Executors.newFixedThreadPool(10));
ListenableFuture<Explosion> explosion = service.submit(new Callable<Explosion>() {
public Explosion call() {
return pushBigRedButton();
}
});
Futures.addCallback(explosion, new FutureCallback<Explosion>() {
// we want this handler to run immediately after we push the big red button!
public void onSuccess(Explosion explosion) {
walkAwayFrom(explosion);
}
public void onFailure(Throwable thrown) {
battleArchNemesis(); // escaped the explosion!
}
});
使用Futures 这个工具类,添加 callback 函数,监听task 情况。
如果有很多tasks 交给service 执行,如:
List<ListenableFuture<InetAddress>> snapshotTasks = new ArrayList<>(allEndpoints.size());
for (InetAddress endpoint : allEndpoints)
{
SnapshotTask snapshotTask = new SnapshotTask(desc, endpoint);
snapshotTasks.add(snapshotTask);
service.execute(snapshotTask);
}
ListenableFuture<List<InetAddress>> allSnapshotTasks = Futures.allAsList(snapshotTasks);
Futures.addCallback 就可以监听 allSnapshotTasks, 当所有tasks 都执行 完成,就调用onSucess 方法,如果有一个task 失败,便调用onFailure 方法。