ListenableFuture简介
public interface ListenableFuture extends Future
ListenableFuture继承自Futures,同样是接口,主要的功能是允许给多线程任务添加监听器listener,当任务执行完之后,会自动触发listener的调用
不同的listener可以在不同的Executors中执行,同一个的ListenableFuture可以注册多个listener。
初始化ListenableFuture对象
通过MoreExecutors.listeningDecorator方法初始化一个ListeningExecutorService,然后使用此实例的submit方法即可初始化ListenableFuture对象
ListeningExecutorService executorService = MoreExecutors.listeningDecorator(
new ThreadPoolExecutor(2, 10,20, TimeUnit.SECONDS,
new ArrayBlockingQueue<>(10),
new ThreadPoolExecutor.DiscardOldestPolicy()));
ListenableFuture<String> listenableFuture = executorService.submit(() -> {
System.out.println("call execute..");
TimeUnit.SECONDS.sleep(6);
return "I'am yellow duck";
});
使用ListenableFuture注册监听器
接口声明了addListener方法,给future添加相应的listener,当future执行完之后,listener就会被调用执行
addListener(Runnable listener, Executor executor) Registers a listener to be run on the given executor.
使用如下:
listenableFuture.addListener(() -> {
try {
System.out.println("get listenable future's result -- " + listenableFuture.get());
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
}, executorService);
给ListenableFuture添加回调函数
通过Futures.addCallback给ListenableFuture添加回调函数
使用如下:
Futures.addCallback(listenableFuture, new FutureCallback<String>() {