美文网首页
GCD队列组的简单使用

GCD队列组的简单使用

作者: 猴代王 | 来源:发表于2016-08-23 10:54 被阅读740次

假如现在我们有一个需求,需要在后台执行A任务和B任务,当A任务和B任务都执行完毕的时候再回到主线程执行任务C,这个是最常见的多线程使用场景.那么这个如何使用GCD来实现勒?####

1.利用串行队列和队列组来实现######

<pre>
//代码如下
// 创建一个串行队列
dispatch_queue_t my_queue = dispatch_queue_create("my_queue", NULL);

// 创建一个队列组
dispatch_group_t my_group = dispatch_group_create();

// 在队列组中my_group中的my_queue中添加一个任务A
dispatch_group_async(my_group, my_queue, ^{
    for (int i = 0; i < 3; i++) {
        NSLog(@" 我是任务 - A - \n%@",[NSThread currentThread]);
    }
});

// 在队列组中my_group中的my_queue中添加一个任务B
dispatch_group_async(my_group, my_queue, ^{
    for (int i = 0; i < 3; i++) {
        NSLog(@" 我是任务 - B - \n%@",[NSThread currentThread]);
    }
});

// 监听my_queue中的任务执行完毕后回到主线程实现任务C
dispatch_group_notify(my_group, my_queue, ^{
    dispatch_async(dispatch_get_main_queue(), ^{
        NSLog(@" 我是任务 - C - \n%@",[NSThread currentThread]);
    });
});</pre>
GCD3.png
2.利用全局并发队列来实现######

<pre>
// 获取全局并发队列
dispatch_queue_t my_queue = dispatch_get_global_queue(0, DISPATCH_QUEUE_PRIORITY_DEFAULT);

// 创建一个队列组
dispatch_group_t my_group = dispatch_group_create();

// 在队列组中my_group中的my_queue中添加一个任务A
dispatch_group_async(my_group, my_queue, ^{
    for (int i = 0; i < 3; i++) {
        NSLog(@" 我是任务 - A - \n%@",[NSThread currentThread]);
    }
});

// 在队列组中my_group中的my_queue中添加一个任务B
dispatch_group_async(my_group, my_queue, ^{
    for (int i = 0; i < 3; i++) {
        NSLog(@" 我是任务 - B - \n%@",[NSThread currentThread]);
    }
});

// 监听my_queue中的任务执行完毕后回到主线程实现任务C
dispatch_group_notify(my_group, my_queue, ^{
    dispatch_async(dispatch_get_main_queue(), ^{
        NSLog(@" 我是任务 - C - \n%@",[NSThread currentThread]);
    });
});

</pre>

GCD3.png

根据打印的Log,可以发现这两种方式都实现了前面的需求,唯一的区别就是第一种方式是任务A执行完毕后B再执行最后再执行C,第一种方式是A和B基本同时进行,A和B执行完毕后再执行的C.根据需求可以自由选择两种方法中的一种.
©如果有出错的地方,欢迎留言.

相关文章

  • GCD队列组的简单使用

    假如现在我们有一个需求,需要在后台执行A任务和B任务,当A任务和B任务都执行完毕的时候再回到主线程执行任务C,这个...

  • GCD基础学习

    一、队列的创建和获取方式 GCD 的使用步骤 GCD 的使用步骤其实很简单,只有两步。创建一个队列(串行队列或并发...

  • iOS - GCD总结

    GCD 的使用步骤 GCD 的使用步骤其实很简单,只有两步。 创建一个队列(串行队列或并发队列)将任务追加到任务的...

  • iOS GCD的详细使用

    GCD 的使用步骤 GCD 的使用步骤其实很简单,只有两步。 创建一个队列(串行队列或并发队列)将任务追加到任务的...

  • 多线程02

    多线程2 GCD队列组: 基本使用: 常用函数 队列和组队列的区别 队列:封装任务,添加任务到队列 组队列:封装任...

  • iOS多线程--GCD篇

    GCD 文章目录GCD简介任务和队列GCD的使用步骤队列的创建方法任务的创建方法GCD的基本使用并行队列 + 同步...

  • GCD介绍

    一、GCD简单介绍 什么是GCD GCD优势 任务和队列 GCD有2个核心概念 GCD的使用就2个步骤 将任务添加...

  • iOS面试--GCD常见用法

    项目中常见的GCD用法有已下几种: 1.GCD栅栏函数2.GCD快速迭代(遍历)3.GCD队列组的使用 1.GCD...

  • GCD的简单使用

    GCD简单使用 GC使用就2个步骤 定制任务 将任务添加到队列中,gcd会自动将队列中的任务取出,放到对应的线程中...

  • iOS多线程--彻底学会多线程之『GCD』

    GCD 文章目录 GCD简介 任务和队列 GCD的使用步骤 队列的创建方法 任务的创建方法 GCD的基本使用 并行...

网友评论

      本文标题:GCD队列组的简单使用

      本文链接:https://www.haomeiwen.com/subject/svngsttx.html