每次看完就忘,还是总结下.
线程的创建
两种线程的创建方法
|
|
异步dispatch_async
把两个任务添加到全局队列里面让他们并行运行,因为最后一句输出语句是在主线程运行的,所以会与两个任务的线程并行运行
|
|
同步dispatch_sync
在全局线程上面同步运行,第一个任务执行完毕才开始执行第二个任务.
|
|
dispatch_after
延迟一段时间把一项任务提交到队列中执行
|
|
dispatch_apply
把一项任务提交到队列中多次执行,具体是并行执行还是串行执行由队列本身决定.注意,dispatch_apply不会立刻返回,在执行完毕后才会返回,是同步的调用.
|
|
dispatch_once
|
|
dispatch_group_t
想要在所以并行线程执行完毕后执行某个任务通常用到dispatch_group_t
|
|
|
|
dispatch_semaphore_create
通常用来控制并发线程的数量
|
|
|
|
死锁
- 死锁案例一
|
|
因为任务2被同步添加进主线程,所以任务2需要等待任务3执行完毕后才能执行,而因为是同步任务3需要等待任务2执行完毕才能执行,所以造成主线程阻塞(死锁)。
- 死锁案例二
|
|
控制台输出:1 4 ,1和4的顺序不一定
线程案例
- 线程案例一
|
|
控制台输出:1 5 2 ,5和2的顺序不一定
- 线程案例二
|
|
1最先执行;2和5顺序不一定;4一定在3后面
- 不要使用dispatch_get_current_queue()获取当前线程