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优化代码
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • feisky云计算、虚拟化与Linux技术笔记posts - 1014, comments - 298, trac...
    不排版阅读 3,938评论 0 5
  • 寻找一种易于理解的一致性算法(扩展版) 摘要 Raft 是一种为了管理复制日志的一致性算法。它提供了和 Paxos...
    yflau阅读 1,045评论 0 1
  • 今天是一个星期日,看似普通,实则是‘一年一度’的母亲节,今天我就借母亲节来介绍一下我的妈妈。 ...
    五班张家铭阅读 238评论 1 0
  • 你像一阵清风 缓缓向我吹来 就像清晨的空气 格外新鲜 你像一缕绚烂的阳光 时刻把我照亮 在温暖的时候 又重新把你想...
    皆非_lx阅读 477评论 0 6
  • [这是一个干货贴 昨晚看到一个对比图,分享给大家,顺便聊聊对【体脂率和体重、减脂和增肌】的看法健身干货 —————...
    董海兰呀阅读 131评论 0 0