iOS开发中在指定的某些线程执行完之后去执行其他线程

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010105969/article/details/79139208

背景:

有四个线程A、B、C、D。

需求:

在A、B线程执行完之后去执行线程C、D。

实现方式:

GCD

1.利用GCD中的barrier

2.利用GCD中的group

2.1 利用在组中所有的线程执行完之后再去执行其他的线程

2.2 利用wait

代码:

barrier:

group相关代码: // 全局变量group dispatch_group_t group = dispatch_group_create(); // 并行队列 dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); // 进入组(进入组和离开组必须成对出现, 否则会造成死锁) dispatch_group_enter(group); dispatch_group_async(group, queue, ^{ // 执行异步任务1 [NSThread sleepForTimeInterval:2]; for (int i = 0; i < 3; i ++) { NSLog(@”1—%@”,[NSThread currentThread ]); // 子线程 } _str1 = @”str1”; dispatch_group_leave(group); });

// 进入组
dispatch_group_enter(group);
dispatch_group_async(group, queue, ^{
    // 执行异步任务2
    [NSThread sleepForTimeInterval:2];
    for (int i = 3; i < 6; i ++) {
        NSLog(@"2---%@",[NSThread currentThread ]);
    }
    _str2 = @"str2";
    dispatch_group_leave(group);

});
// wait
dispatch_group_wait(group, DISPATCH_TIME_FOREVER);

dispatch_async(dispatch_get_global_queue(0, 0), ^{
    NSLog(@"%@", [NSThread currentThread]);
    _str1 = @"str..";
    dispatch_async(dispatch_get_main_queue(), ^{
        NSLog(@"%@", _str1);
        NSLog(@"%@", _str2);
        NSLog(@"%@", [NSThread currentThread]); // 主线程
    });
});

return;
dispatch_group_notify(group, queue, ^{  // 监听组里所有线程完成的情况

    dispatch_async(dispatch_get_global_queue(0, 0), ^{
       NSLog(@"%@", [NSThread currentThread]);
        _str1 = @"str..";

        dispatch_async(dispatch_get_main_queue(), ^{
            NSLog(@"%@", _str1);
            NSLog(@"%@", _str2);
            NSLog(@"%@", [NSThread currentThread]); // 主线程
            NSLog(@"完成...");
        });

    });

});

demo地址:https://gitee.com/liangsenliangsen/dispatch_group

本篇文章到这里就结束了,愿大家加班不多工资多,男同胞都有女朋友,女同胞都有男朋友。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏向治洪

手把手教你从Core Data迁移到Realm

前言 Hybrid App(混合模式移动应用)是指介于web-app、native-app这两者之间的app,兼具“Native App良好用户交互体验的优势”...

26270
来自专栏王大锤

再谈RunLoop

29640
来自专栏TechBox

GCD信号量-dispatch_semaphore_t

30110
来自专栏程序员互动联盟

Windows SDK编程基本框架

在Windows平台下,最常见最流行的编程就是MFC编程了,在网上可以搜索出大把的MFC编程相关的文章,今天我们来讨论另外一种windows下的编程模式,即W...

338130
来自专栏张善友的专栏

依赖注入容器Autofac

在.NET上现在存在许多的依赖注入容器, 我也在实践中使用过Castle Windsor、StructureMap、Autofac 、Unity。这些容器的简要...

27890
来自专栏iOS技术

透彻理解 NSNotificationCenter 通知

NSNotificationCenter这个东西作为iOS工程师想必都不陌生,但是有人可能连参数的意义都没搞明白,写这篇文章的目的不止是为了让不会用的人会用,更...

44270
来自专栏iOS开发笔记

iOS学习系列之多线程—NSThread(一)

iOS线程模型 1 NSThread:objective-c线程库 2 Blocks/GCD: Blocks模式的线程池 3 NSOperationQueue:...

30650
来自专栏GuZhenYin

浅析Entity Framework Core2.0的日志记录与动态查询条件

前言 Entity Framework Core 2.0更新也已经有一段时间了,园子里也有不少的文章.. 本文主要是浅析一下Entity Framework C...

33760
来自专栏老司机的简书

老司机出品————多线程实践

老司机今天讲的不是多线程的基本用法,这个东西往上的博客其实蛮多的,而且也基本是多线程的基本用法。老司机今天主要的是介绍多个异步线程执行结束后进行回调的解决方案,...

11010
来自专栏一“技”之长

我的女神——简洁实用的iOS代码调试框架 原

        这篇博客的起源是接手了公司的一个已经完成的项目,来做代码优化,项目工程很大,并且引入了很多公司内部的SDK,要搞清楚公司内部的这套框架,的确不是...

8010

扫码关注云+社区

领取腾讯云代金券