guava为java并行编程future提供了很多有用扩展,其主要接口为listenablefuture,并借助于futures静态扩展。
继承至future的listenablefuture,允许我们添加回调函数在线程运算完成时返回值或者方法执行完成立即返回。
对listenablefuture添加回调函数:
futures.addcallback(listenablefuture<v>, futurecallback<v>, executor)
其中 futurecallback是一个包含onsuccess(v),onfailure(throwable)的接口。
使用如:
futures.addcallback(listenablefuture, new futurecallback<object>() { public void onsuccess(object result) { system.out.printf("onsuccess with: %s%n", result); } public void onfailure(throwable thrown) { system.out.printf("onfailure %s%n", thrown.getmessage()); } });
同时guava中futures对于future扩展还有:
下边是一个对于future的测试demo:
@test public void should_test_furture() throws exception { listeningexecutorservice service = moreexecutors.listeningdecorator(executors.newfixedthreadpool(10)); listenablefuture future1 = service.submit(new callable<integer>() { public integer call() throws interruptedexception { thread.sleep(1000); system.out.println("call future 1."); return 1; } }); listenablefuture future2 = service.submit(new callable<integer>() { public integer call() throws interruptedexception { thread.sleep(1000); system.out.println("call future 2."); // throw new runtimeexception("----call future 2."); return 2; } }); final listenablefuture allfutures = futures.allaslist(future1, future2); final listenablefuture transform = futures.transform(allfutures, new asyncfunction<list<integer>, boolean>() { @override public listenablefuture apply(list<integer> results) throws exception { return futures.immediatefuture(string.format("success future:%d", results.size())); } }); futures.addcallback(transform, new futurecallback<object>() { public void onsuccess(object result) { system.out.println(result.getclass()); system.out.printf("success with: %s%n", result); } public void onfailure(throwable thrown) { system.out.printf("onfailure%s%n", thrown.getmessage()); } }); system.out.println(transform.get()); }
官方资料主页:https://awk.so/@code.google.com!/p/guava-libraries/wiki/listenablefutureexplained
以上就是对guava - 并行编程futures 的资料整理,后续继续补充相关资料谢谢大家对本站的支持!
如对本文有疑问, 点击进行留言回复!!
HashMap、Hashtable、ConcurrentHashMap三者间的异同
解决RecycleView 中Item包含Edittext时,滑动view复用导致数据错乱的问题
多线程、同步工作原理、死锁案例、Lock接口、线程的生命周期的讲解及实现
网友评论