java多线程之异步future机制的原理和实现

java多线程之异步future机制的原理和实现

ID:30777749

大小:78.00 KB

页数:5页

时间:2019-01-03

java多线程之异步future机制的原理和实现_第1页
java多线程之异步future机制的原理和实现_第2页
java多线程之异步future机制的原理和实现_第3页
java多线程之异步future机制的原理和实现_第4页
java多线程之异步future机制的原理和实现_第5页
资源描述:

《java多线程之异步future机制的原理和实现》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、Java多线程之异步Future机制的原理和实现这篇文章主要为大家详细介绍了Java多线程乙界步Future机制的原理和实现,感兴趣的小伙伴们可以参考一下项目中经常有些任务需要异步(提交到线程池屮)去执彳亍,而主线程往往需要知道异步执行产生的结果,这时我们要怎么做呢?川runnable是无法实现的,我们需要用callable看下面的代码:importjava.util.concurrent.Callable;importjava.util.concurrent.ExecutionException;importjava.util.concurrent.Ex

2、ecutorService;importjava.util.concurrent.Executors;importjava.util.concurrent.Future;publicclassAddTaskimplementsCallable{privateinta,b;publicAddTask(inta,intb){this.a=a;this.b=b;}@OverridepublicIntegercallthrowsException{Integerresult=a+b;returnresult;}publicstaticvoidma

3、in(String[]args)throwsInterruptedException,ExecutionException{ExecutorServiceexecutor=Executors.newSingleThreadExecutor;//JDK目前为止返冋的都是FutureTask的实例Futurefuture=executor.submit(newAddTask(l,2));Integerresult=future.get;//只有当future的状态是已完成时(future.isDone=true),get方法才会返回}}虽然可

4、以实现获取异步执行结果的需求,但是我们发现这个Future其实很不好用,因为它没有提供通知的机制,也就是说我们不知道future什么时候完成(如果我们需要轮询isDone()來判断的话感觉就没冇用这个的必要了)。看下java.util.concurrent.future.Future的接口方法:publicinterfaceFuture{booleancancel(booleanmaylnterruptlfRunning);booleanisCancelled;booleanisDone;VgetthrowsInterruptedException,

5、ExecutionException;Vget(longtimeout,TimeUnitunit)throwsInterruptedException,ExecutionException,TimeoutException;}由此可见JDK的Future机制其实并不好用,如果能给这个future加个监听器,让它在完成时通知监听器的话就比较好用了,就像下面这个(Future:packagefuture;importjava.util.concurrent.CancellationException;importjava.util.concurrent・Fut

6、ure;importjava.util.concurrent.TimeUnit;/***Theresultofanasynchronousoperation.**@authorlixiaohui*@param执行结果的类型参数*/publicinterfaceIFutureextendsFuture{booleanisSuccess;//是否成功VgetNow;〃立即返回结果(不管Future是否处于完成状态)Throwablecause;〃若执行失败时的原因booleanisCancellable;//是否可以取消IFuturea

7、waitthrowsInterruptedException;〃等待future的完成booleanawait(longtimeoutMillis)throwsInterruptedException;//超时等待future白勺;丘成booleanawaitflongtimeout,TimeUnittimeunit)throwsInterruptedException;IFutureawaitUninterruptibly;//等待future的完成,不响应中断booleanawaitUninterruptibly(longtimeoutMilli

8、s);〃超时等待future的完成,不响应中断booleanawa

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。