美文网首页
多线程(三) 队列组的使用

多线程(三) 队列组的使用

作者: PerryMorning | 来源:发表于2020-01-21 11:58 被阅读0次

    在开发过程中,我们可能会遇到这样的情况,任务1和任务2可以同时进行,但是任务3和任务4只有等任务1和任务2都完成以后,才可以执行。
    这时候如果我们还是只使用并行队列,就不能满足需求。队列组dispatch_group_t就是为了满足这种情况。
    使用方法:
    1.创建队列组;
    2.创建需要执行的队列,并发或者串行;
    3.将需要执行的任务1和任务2放在队列组中;
    4.执行完任务后,通知需要继续执行的任务3、任务4。

    具体使用流程如下:

    // 创建队列组
        dispatch_group_t group = dispatch_group_create();
        // 创建并发队列
        dispatch_queue_t queue = dispatch_queue_create("my_queue", DISPATCH_QUEUE_CONCURRENT);
        
        // 添加异步任务
        dispatch_group_async(group, queue, ^{
            for (int i = 0; i < 5; i++) {
                NSLog(@"任务1-%@", [NSThread currentThread]);
            }
        });
        
        dispatch_group_async(group, queue, ^{
            for (int i = 0; i < 5; i++) {
                NSLog(@"任务2-%@", [NSThread currentThread]);
            }
        });
        
        // 等前面的任务执行完毕后,会自动执行这个任务
        dispatch_group_notify(group, queue, ^{
            for (int i = 0; i < 5; i++) {
                NSLog(@"任务3-%@", [NSThread currentThread]);
            }
        });
        
        dispatch_group_notify(group, dispatch_get_main_queue(), ^{
            for (int i = 0; i < 5; i++) {
                NSLog(@"任务4-%@", [NSThread currentThread]);
            }
        });
    

    这样就可以完美解决我们之前遇到的任务3和任务4要在任务1和任务2完成之后再执行的需求了。

    需要注意的是:
    任务3和任务4可以根据具体需求,选择在当前队列或者其他队列(包含主队列)执行任务。

    相关文章

      网友评论

          本文标题:多线程(三) 队列组的使用

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