搜索

首页  >  问答  >  正文

java - 发送10个网络请求,然后再接收到所有回应之后执行后续操作,如何实现?

我想到的

for iOS
1.用dispatch_group实现
2.用RunLoop实现   

还有没有其他的比较好的实现方式,求关于并发编程的文章.

天蓬老师天蓬老师2766 天前1521

全部回复(21)我来回复

  • 伊谢尔伦

    伊谢尔伦2017-04-17 16:17:12

    那网络请求都是异步的,同样的处理方法吗?

    回复
    0
  • 迷茫

    迷茫2017-04-17 16:17:12

    建一个block或closure。发送一个网络请求,在completionHandler中调用自身发送下一个请求。

    回复
    0
  • 迷茫

    迷茫2017-04-17 16:17:12

    Android肯定RxJava. iOS RxSwift?

    回复
    0
  • PHP中文网

    PHP中文网2017-04-17 16:17:12

    dispatch_group_t group =dispatch_group_create();
    dispatch_group_enter(group);
    [请求1完成:^(BOOL成功,id响应){

    雷雷

    }];

    dispatch_group_enter(group);
    [请求2完成:^(BOOL成功,id响应){

    雷雷

    }];

    dispatch_group_enter(group);
    [请求3已完成:^(BOOL成功,id响应){

    雷雷

    }];

    dispatch_group_enter(group);
    [请求4已完成:^(BOOL成功,id响应){

    雷雷

    }];
    .
    .
    .
    .

    dispatch_group_notify(group,dispatch_get_main_queue(), ^{

    雷雷

    });

    回复
    0
  • 黄舟

    黄舟2017-04-17 16:17:12

    感觉还是使用GCD更好,因为也可以总在c/c++代码里面

    回复
    0
  • 高洛峰

    高洛峰2017-04-17 16:17:12

    AFNetworking的可以用AFURLConnectionOperation batchOfRequestOperations: progressBlock:completionBlock:

    回复
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-17 16:17:12

    使用GCD的group

    回复
    0
  • ringa_lee

    ringa_lee2017-04-17 16:17:12

    Android中使用RxJava可以轻松实现。
    当然,也可以试用线程同步辅助类CountDownLatch实现,CountDownLatch的使用可以参考下面博客:
    http://www.liuling123.com/2013/08/countdownlatch-demo.html

    回复
    0
  • PHP中文网

    PHP中文网2017-04-17 16:17:12

    看到大神们的答案我震惊了,面对这样的问题我往往是手动实现的,我一般会设置一个资源变量,初始化资源为十,跑一个线程监听资源数,然后开始并发任务,每完成一个资源减一,当资源为零时停止监听线程,完成后续操作。

    这是笨办法。在我对某门语言不是很了解的时候我都会这样用,毕竟大部分语言都能这样实现。

    回复
    0
  • 天蓬老师

    天蓬老师2017-04-17 16:17:12

    java本身的并发框架就支持解决你说的问题,Future

    回复
    0
  • 取消回复