首页  >  问答  >  正文

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

我想到的

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

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

天蓬老师天蓬老师2764 天前1515

全部回复(21)我来回复

  • 怪我咯

    怪我咯2017-04-17 16:17:12

    有人说了 NSOperation,我就不说了。
    但我更喜欢 GCD。这个问题可以用 barrier 解决:

        dispatch_queue_t queue = dispatch_queue_create("JOHNSHAW", DISPATCH_QUEUE_CONCURRENT);
        
        dispatch_async(queue, ^{
            NSLog(@"task 1");
            sleep(1);
        });
        dispatch_async(queue, ^{
            NSLog(@"task 2");
            sleep(1);
        });
        
        dispatch_barrier_async(queue, ^{
            NSLog(@"after task 1 and task 2");
            sleep(1);
        });
        
        dispatch_async(queue, ^{
            NSLog(@"do someting else");
        });
    

    其实我更喜欢 RAC,不过 RAC 毕竟是个重型框架,用的公司并不多

        RACSignal *task1 = ...;
        RACSignal *task2 = ...;
        
        [[RACSignal combineLatest:@[task1,task2]] subscribeNext:^(id x) {
            NSLog(@"after task1 and task2 ");
        }];

    回复
    0
  • 阿神

    阿神2017-04-17 16:17:12

    用RxAndroid。一个.zip方法就搞定了。。

    回复
    0
  • PHP中文网

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

    比较好的方式使用NSOperation 因为有addDependecy方法~

    回复
    0
  • PHP中文网

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

    For javascript:

    1. https://github.com/caolan/async
      处理异步的并行与串行都很方便

    2. 用jQuery的Promise, 或其它库的Promise实现 :)

    回复
    0
  • PHP中文网

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

    借鉴下map reduce方法,类似于归并排序的思路

    回复
    0
  • 迷茫

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

    正常使用 dispatch_group_wait 和 dispatch_group_notify 就好了。

    还可以使用 dispatch_barrier_sync / dispatch_barrier_async,将收到所有响应之后的操作用作 barrier block,那么这个 block 就会等待所有网络请求结束之后再执行。

    回复
    0
  • 黄舟

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

    不知道你问的Android还是iOS, 如果是Android用CountDownLatch来控制线程吧

    回复
    0
  • PHPz

    PHPz2017-04-17 16:17:12

    java的话,用concurrent包的future api可以实现多线程分别请求,然后全部响应后处理结果。

    回复
    0
  • ringa_lee

    ringa_lee2017-04-17 16:17:12

    for iOS
    创建一个串行队列处理。不影响外部并发请求。

    回复
    0
  • 黄舟

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

    JS中如何实现呢?

    回复
    0
  • 取消回复