有人采用这样一种方式等待多个并发请求的最后完成

public List<ApodItem> decorateRssItemsWithLinkImages(List<RssItem> rssItems) {
      ArrayList<ApodItem> apodItems = new ArrayList<>(rssItems.size());
      final CountDownLatch fetchLinkLatch = new CountDownLatch(rssItems.size());
      for (RssItem rssItem : rssItems) {
        final ApodItem apodItem = new ApodItem();
        apodItem.rssItem = rssItem;
        fetchLinkPage(rssItem.link, new PageScrapedCallback() {
          @Override
          public void onPageScraped(@Nullable List<String> imageUrls) {
            apodItem.largeImageUrl = imageUrls != null && !imageUrls.isEmpty()
                ? imageUrls.get(0)
                : null;
            fetchLinkLatch.countDown();
          }
        });
        apodItems.add(apodItem);
      }

      // Wait for all link fetches to complete, despite running them in parallel...
      Util.awaitUninterruptibly(fetchLinkLatch);

      return apodItems;
    }

在一个死循环中去检查计数器是否countDonw到了0,如果到了0,表示所有并发任务全部完成,那么死循环退出。

public static void awaitUninterruptibly(CountDownLatch latch) {
    while (true) {
      try {
        latch.await();
        return;
      } catch (InterruptedException e) {
        // Keep going...
      }
    }
  }

试着想一想,是否还有其他方式控制并发?
AtomInteger??

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,169评论 19 139
  • 《创造力—心流与创新心理学》,如果我来写这本书,提纲我会怎样写: 以前认为创造力是突发奇想,即脑洞大。其实慢慢发现...
    章鱼狗阅读 1,715评论 0 0
  • 明明知道时间很宝贵,可是打天王者荣耀却停不下来? 明明感觉注意力被无情收割,打开朋友圈却总想再刷多一会? 道理明明...
    陈伊铠阅读 2,144评论 0 0
  • 1、目标要趁早 一对夫妇有两个孩子,孩子还小的时候,父母决定为他们养一只小狗。小狗抱回来以后, 他们想请一位朋友帮...
    笔行天下阅读 12,191评论 0 0
  • 培育工匠精神首要培育环境 朋友从一家国有银行离职,笔者甚感惊讶,细问之下不免感慨。原来朋友在这家国有银行风控部门就...
    井冈山豆皮阅读 5,530评论 0 2

友情链接更多精彩内容