主队列-异步执行;主队列-同步执行(死锁)
2016-08-08 16:10
162 查看
主队列-同步执行死锁问题,分享
//主队列-异步执行
//分析:在主线程,任务有序执行,当执行demo,就相当与在主队列添加一个任务A,这个任务执行完NSLog的时候,又往对列中添加一个任务B;由于是
异步执行,所以任务A执行完之后,才去执行任务B(block里面的代码); 可以通过NSLog验证.
-(void)demo{
NSLog(@"1235");
//1.主队列,不是自己创建的,是从系统获得,是一个特殊的串行队列,一定对应主线程
dispatch_queue_t mainQueue =
dispatch_get_main_queue();
for (int i =
0; i<20; i++) {
dispatch_async(mainQueue, ^{
NSLog(@"%d->%@",i,[NSThread
currentThread]);
});
}
NSLog(@"呵呵");
}
---------------------------------------------------------------------------
//主队列-同步执行-->导致死锁
//当前线程是主线程,不执行
//分析:在主线程,任务有序执行,当执行demo2,就相当与在主队列添加一个任务A,这个任务执行完NSLog的时候,又往对列中添加一个任务B;由于是
同步执行,所以任务B会等着任务A执行完之后,在去执行由于又是在主线程中,任务A(整个demo2)等着任务B执行完之后在去执行之后的程序,这样两
个任务相互等待,导致死锁,->只打印i;
-(void)demo2{
NSLog(@"i");
dispatch_queue_t mainQueue =
dispatch_get_main_queue();
dispatch_sync(mainQueue, ^{
NSLog(@"%@",[NSThread
currentThread]);
});
NSLog(@"呵呵");
}
-------------------------------------------------------------------------
以上为个人理解,哪位大牛有更高深的见解请联系我(工作中互相学习)
//主队列-异步执行
//分析:在主线程,任务有序执行,当执行demo,就相当与在主队列添加一个任务A,这个任务执行完NSLog的时候,又往对列中添加一个任务B;由于是
异步执行,所以任务A执行完之后,才去执行任务B(block里面的代码); 可以通过NSLog验证.
-(void)demo{
NSLog(@"1235");
//1.主队列,不是自己创建的,是从系统获得,是一个特殊的串行队列,一定对应主线程
dispatch_queue_t mainQueue =
dispatch_get_main_queue();
for (int i =
0; i<20; i++) {
dispatch_async(mainQueue, ^{
NSLog(@"%d->%@",i,[NSThread
currentThread]);
});
}
NSLog(@"呵呵");
}
---------------------------------------------------------------------------
//主队列-同步执行-->导致死锁
//当前线程是主线程,不执行
//分析:在主线程,任务有序执行,当执行demo2,就相当与在主队列添加一个任务A,这个任务执行完NSLog的时候,又往对列中添加一个任务B;由于是
同步执行,所以任务B会等着任务A执行完之后,在去执行由于又是在主线程中,任务A(整个demo2)等着任务B执行完之后在去执行之后的程序,这样两
个任务相互等待,导致死锁,->只打印i;
-(void)demo2{
NSLog(@"i");
dispatch_queue_t mainQueue =
dispatch_get_main_queue();
dispatch_sync(mainQueue, ^{
NSLog(@"%@",[NSThread
currentThread]);
});
NSLog(@"呵呵");
}
-------------------------------------------------------------------------
以上为个人理解,哪位大牛有更高深的见解请联系我(工作中互相学习)
相关文章推荐
- GCD使用 串行并行队列 与 同步异步执行的各种组合 及要点分析
- iOS开发-队列和同步异步执行的结果分析
- GCD网络多线程---同步执行,异步执行,串行队列,并行队列
- 关于GCD中串行队列、并发队列和同步执行、异步执行的探讨
- GCD使用 串行并行队列 与 同步异步执行的各种组合 及要点分析
- 主队列中添加的同步操作永远不会被执行,会死锁原因
- GCD编程dispatch_sync(同步)和dispatch_async(异步)方式执行并发队列任务区别
- GCD-同步,异步分别在串行队列,并发队列,主队列下的执行方式
- iOS 异步同步执行和并行串行队列的不解之缘
- 【iOS】GCD队列、同步异步
- 同步,异步,串行,并行队列
- 线程 GCD 同步执行 异步执行
- ajax同步、异步执行简单理解与证明
- 消息队列使用,异步执行,加快速度
- spring执行同步任务和异步任务
- iOS GCD, 同步,异步,串行队列,并行队列,dispatch_group
- js文件引用方式及其同步执行与异步执行
- jquery ajax 同步异步的执行 return值不能取得的解决方案
- iOS网络开发中的同步、异步和请求队列