一.队列:这里的队列指执行任务的等待队列,即用来存放任务的队列。
二.在队列中加入任务
1.队列中 添加 异步调用的任务,并执行:
2.队列中 添加 同步调用的任务,并执行:
三、注意: 并发队列不具备开启新线程能力,异步调用任务具备开启新线程功能,
所以并发队列中添加同步执行多个任务时也只能依次执行
四、GCD其他方法
1.GCD栅栏:dispatch_barrier_async
我们有时需要异步执行两组操作,而且第一组操作执行完之后,才能开始执行第二组操作。这样我们就需要一个相当于 栅栏 一样的一个方法将两组异步执行的操作组给分割起来,当然这里的操作组里可以包含一个或多个任务。
2.GCD延时执行:dispatch_after
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
// 2.0 秒后异步追加任务代码到主队列,并开始执
});
3.GCD 一次性代码(只执行一次):dispatch_once
-
GCD 队列组:dispatch_group
有时候我们会有这样的需求:分别异步执行2个耗时任务,然后当2个耗时任务都执行完毕后再回到主线程执行任务。这时候我们可以用到 GCD 的队列组。
.调用队列组的 dispatch_group_async 先把任务放到队列中,然后将队列放入队列组中。或者使用队列组的 dispatch_group_enter、dispatch_group_leave 组合来实现 dispatch_group_async。
.调用队列组的 dispatch_group_notify 回到指定线程执行任务。或者使用 dispatch_group_wait 回到当前线程继续向下执行(会阻塞当前线程)。
dispatch_group_wait:
-
暂停当前线程(阻塞当前线程),等待指定的 group 中的任务执行完成后,才会往下继续执行。
5.线程锁:semaphore