您的位置:首页 > 其它

主队列-异步执行;主队列-同步执行(死锁)

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(@"呵呵");
}
-------------------------------------------------------------------------
以上为个人理解,哪位大牛有更高深的见解请联系我(工作中互相学习)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息