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

在开发过程中,我们可能会遇到这样的情况,任务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可以根据具体需求,选择在当前队列或者其他队列(包含主队列)执行任务。

你可能感兴趣的:(多线程(三) 队列组的使用)