CompletableFuture-FutureTask结合线程池提升性能

使用线程池: 

 

返回计算结果: 

CompletableFuture-FutureTask结合线程池提升性能_第1张图片


2.2.3 Future编码实战和优缺点分析

优点:Future+线程池异步多线程任务配合,能显著提高程序的运行效率。

缺点:

get()阻塞---一旦调用get()方法求结果,一旦调用不见不散,非要等到结果才会离开,不管你是否计算完成,如果没有计算完成容易程序堵塞。

isDone()轮询---轮询的方式会耗费无谓的cpu资源,而且也不见得能及时得到计算结果,如果想要异步获取结果,通常会以轮询的方式去获取结果,尽量不要阻塞。

结论:Future对于结果的获取不是很友好,只能通过阻塞或轮询的方式得到任务的结果。

正常情况: 

CompletableFuture-FutureTask结合线程池提升性能_第2张图片


get()阻塞:

CompletableFuture-FutureTask结合线程池提升性能_第3张图片 

main线程被阻塞了,futureTask.get() 后过了5秒才打印main  ----忙其它任务了


设置 futureTask.get() 3秒钟,过时不候

你可能感兴趣的:(JUC并发编程与源码分析,java)