dispatch_sync添加到主线程关联的串行队列卡死问题理解
来源:互联网 发布:java 搜索算法 编辑:程序博客网 时间:2024/06/05 09:20
- (void)viewDidLoad { [super viewDidLoad]; NSLog(@"1"); dispatch_sync(dispatch_get_main_queue(), ^{ NSLog(@"2"); }); NSLog(@"3"); // Do any additional setup after loading the view, typically from a nib.}
上面的代码只会打印1 然会就会线程卡死,这是为什么呢?
因为dispatch_get_main_queue()得到的是一个串行队列,串行队列的特点: 一次只调度一个任务,队列中的任务一个接着一个地执行(一个任务执行完毕后,再执行下一个任务)
同步(sync) 操作,它会阻塞当前线程并等待 Block 中的任务执行完毕,然后当前线程才会继续往下运行
dispatch_sync提交一个打印任务NSLog(@”2”)到主线程关联的串行队列中,主线程关联的串行队列现在有一个viewDidLoad任务,打印任务NSLog(@”2”)排在viewDidLoad后面,队列FIFO(先进先出)的原则,打印任务NSLog(@”2”);想要得到执行必须等到viewDidLoad执行完毕后才能得到执行,但是viewDidLoad想要执行完毕必须要等打印任务NSLog(@”2”)执行完毕,所以就卡死在这了。
0 0
- dispatch_sync添加到主线程关联的串行队列卡死问题理解
- GCD 中串行队列、并行队列、dispatch_sync、dispatch_async的关系
- windows主线程等待子线程退出卡死问题
- GCD之 串行队列,并行队列,全局队列,主线程队列
- 主线程的理解
- Android中为什么主线程不会因为Looper.loop()里的死循环卡死?
- 为什么在主线程的Looper.looper死循环不会卡死
- Android中为什么主线程不会因为Looper.loop()里的死循环卡死?
- Android中为什么主线程不会因为Looper.loop()里的死循环卡死?
- Android中为什么主线程不会因为Looper.loop()里的死循环卡死?
- 关于Android中为什么主线程不会因为Looper.loop()里的死循环卡死?
- Android中为什么主线程不会因为Looper.loop()里的死循环卡死?
- 为什么在主线程的Looper.looper死循环不会卡死
- Android中为什么主线程不会因为Looper.loop()里的死循环卡死
- Android中为什么主线程不会因为Looper.loop()里的死循环卡死
- Android为什么主线程不会因为Looper.loop()里的死循环卡死
- Android中为什么主线程不会因为Looper.loop()里的死循环卡死?
- GCD:dispatch_sync会在当前线程中执行派发到其他队列的任务
- Android自定义iOS风格Dialog
- 关于数据结构中的栈的基本算法
- 在VB6中,一般 Set xxx = Nothing 起到什么作用?
- Java关键字final、static使用总结
- 70. Climbing Stairs
- dispatch_sync添加到主线程关联的串行队列卡死问题理解
- android studio 代码混淆打包错误 The same input jar is specified twice
- 常用算法整理:链表相关
- iOS 使用系统默认声音,震动
- 线性同余方程
- 文件权限管理__1__修改拥有者和所属组
- 乱码问题(3)请求乱码和数据库乱码
- Android 打开第三方应用的方法
- 魔绑广告病毒感染量提升 ROOT控制手机并下载其他病毒