在我们实际的开发中,我们往往有这样的需求,就是需要先执行完线程1,再执行线程2,当前面两个线程执行完毕之后,才能去执行线程3.这个逻辑如果使用线程组来实现就会显得非常方便。现在我将会来实现这个案例。代码我会放在github https://github.com/chenyufeng1991/GCD ,的GCD03中。
(1)需要导入封装后的GCD源码。其实个人推荐使用iOS原生的GCD,请移步《iOS开发——GCD的使用与多线程开发浅析》这篇博客。然后在ViewController中实现如下:
#import "ViewController.h"
#import "GCD.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
//初始化线程组;
GCDGroup *group = [[GCDGroup alloc] init];
//创建一个线程队列;
/*
注意:
我这里创建的队列是一个并发(并行)队列,可以执行多个线程,前后顺序不一定。
*/
GCDQueue *queue = [[GCDQueue alloc] initConcurrent];
//让线程在group中执行;(线程1)
[queue execute:^{
sleep(1);//延迟1s;
NSLog(@"线程1执行完毕");
} inGroup:group];
//让线程在group中执行;(线程2)
[queue execute:^{
sleep(3);//延迟3s;
NSLog(@"线程2执行完毕");
} inGroup:group];
//监听线程组是否执行结束,然后执行线程3;
[queue notify:^{
NSLog(@"线程3执行完毕");
} inGroup:group];
}
@end
(2)运行效果如下:
(3)结果分析:
我在执行线程1、线程2的时候,分别进行了休眠若干时间,即使这样,也不会先去执行线程3.这里也使用了通知的机制,前面执行完毕后去通知最后一个线程执行。
github主页:https://github.com/chenyufeng1991 。欢迎大家访问!

本文通过一个具体的示例介绍了如何使用iOS中的GCD(Grand Central Dispatch)线程组来实现线程间的有序执行。示例展示了如何创建并发队列,并确保线程1和线程2执行完毕后才执行线程3。
2202

被折叠的 条评论
为什么被折叠?



