3.从Future到CompletionService实现询价功能

1.询价介绍(包含背景,以及初始问题)

1)背景

          做一个询价应用,这个应用需要从三个电商询价,然后保存在自己的数据库里。

2)代码以及出现问题

询价代码

这种方案可靠安全,但是性能比较低下,因为是串行

2.方案改良

1) 方案1--》Future--》简单并行

   1.实现

Future代码展示

   2.问题:如果获取电商S1报价的耗时很长,那么即便获取电商S2报价的耗时很短,也无法让保存S2报价的操作先执行,因为这个主线程都阻塞在了 f1.get() 操作上

2) 方案2--》CompletionService---》批量并行

1.实现:

CompletionService实现图

这样就可以保证先执行结束的先入队,并保存到数据库中

2.适用场景:Dubbo中有一种叫做Forking的集群模式,这种集群模式下,支持并行地调用多个查询服务,只要有一个成功返回结果,整个服务就可以返回了!例如你需要提供一个地址转坐标的服务,为了保证该服务的高可用和性能,你可以并行地调用3个地图服务商的API,然后只要有1个正确返回了结果r,那么地址转坐标这个服务就可以直接返回r了。

3)询价扩展:计算最低价

1.实现

使用countDownLatch优化代码

你可能感兴趣的:(3.从Future到CompletionService实现询价功能)