您的位置:首页 > 其它

guava 并发

2016-04-27 00:00 190 查看

概念

ListenableFuture顾名思义就是可以监听的Future,它是对java原生Future的扩展增强。我们知道Future表示一个异步计算任务,当任务完成时可以得到计算结果。如果我们希望一旦计算完成就拿到结果展示给用户或者做另外的计算,就必须使用另一个线程不断的查询计算状态。这样做,代码复杂,而且效率低下。使用ListenableFuture Guava帮我们检测Future是否完成了,如果完成就自动调用回调函数,这样可以减少并发程序的复杂度。
代码:

import com.google.common.util.concurrent.*;
import java.util.concurrent.*;
/**
* Created by admin on 2016/4/27.
*/
public class ExcutorEngineTest {
public static void main(String[] args) throws Exception {
ListeningExecutorService executorService = MoreExecutors
.listeningDecorator(MoreExecutors
.getExitingExecutorService(new ThreadPoolExecutor(10, 100,
3000, TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<Runnable>())));
ListenableFuture<Integer> future = executorService.submit(new Task("test"));
System.out.println("future:" + future.get());
Futures.addCallback(future, new FutureCallback<Integer>() {
@Override
public void onSuccess(Integer result) {
System.out.println("result" + result);
}
@Override
public void onFailure(Throwable t) {
System.err.println("error");
}
});
}
static class Task implements Callable<Integer>{
String str;
public Task(String str){
this.str = str;
}
@Override
public Integer call() throws Exception {
System.out.println("call excute...." + str);
return 8;
}
}
}

--------------------

执行结果:

call excute....test

future:8

result8
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: