搜尋

首頁  >  問答  >  主體

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

我想到的

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

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

天蓬老师天蓬老师2803 天前1586

全部回覆(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
  • 取消回覆