GCD实践——GCD线程组

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

       在我们实际的开发中,我们往往有这样的需求,就是需要先执行完线程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  。欢迎大家访问!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值