我想到的
for iOS 1.用dispatch_group实现 2.用RunLoop实现
还有没有其他的比较好的实现方式,求关于并发编程的文章.
欢迎选择我的课程,让我们一起见证您的进步~~
那網路請求都是非同步的,同樣的處理方法嗎?
建一個block或closure。發送網路請求,在completionHandler中呼叫自身發送下一個請求。
Android肯定RxJava. iOS RxSwift?
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(), ^{
});
感覺還是使用GCD比較好,因為也可以總是在c/c++程式碼裡面
用AFNetworking的可以用AFURLConnectionOperation batchOfRequestOperations: progressBlock:completionBlock:
AFNetworking
AFURLConnectionOperation batchOfRequestOperations: progressBlock:completionBlock:
使用GCD的group
Android中使用RxJava可以輕鬆實現。 當然,也可以試試線程同步輔助類CountDownLatch實現,CountDownLatch的使用可以參考下面博客:http://www.liuling123.com/2013/08/countdownlatch-demo.html
看到大神們的答案我震驚了,面對這樣的問題我往往是手動實現的,我一般會設置一個資源變量,初始化資源為十,跑一個線程監聽資源數,然後開始並發任務,每完成一個資源減一,當資源為零時停止監聽線程,完成後續操作。
這是笨辦法。在我對某門語言不是很了解的時候我都會這樣用,畢竟大部分語言都能這樣實現。
java本身的並發框架就支持解決你說的問題,Future
那網路請求都是非同步的,同樣的處理方法嗎?
建一個block或closure。發送網路請求,在completionHandler中呼叫自身發送下一個請求。
Android肯定RxJava. iOS RxSwift?
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(), ^{
雷雷});
感覺還是使用GCD比較好,因為也可以總是在c/c++程式碼裡面
用
AFNetworking
的可以用AFURLConnectionOperation batchOfRequestOperations: progressBlock:completionBlock:
使用GCD的group
Android中使用RxJava可以輕鬆實現。
當然,也可以試試線程同步輔助類CountDownLatch實現,CountDownLatch的使用可以參考下面博客:
http://www.liuling123.com/2013/08/countdownlatch-demo.html
看到大神們的答案我震驚了,面對這樣的問題我往往是手動實現的,我一般會設置一個資源變量,初始化資源為十,跑一個線程監聽資源數,然後開始並發任務,每完成一個資源減一,當資源為零時停止監聽線程,完成後續操作。
這是笨辦法。在我對某門語言不是很了解的時候我都會這樣用,畢竟大部分語言都能這樣實現。
java本身的並發框架就支持解決你說的問題,Future