主队列:只要队列中有任务,就会安排任务到主线程中执行。
但是如若主队列发现主线程在执行任务,那么主队列会暂停调度队列中的任务,直到主线程空闲为止。
同步函数:要求立马执行,我要是不执行,大家都别想执行。
所以当主线程中执行同步函数,并且这个同步函数的任务又是添加到了主队列时,主线程执行同步函数,主队列则等着把同步函数的第一个任务交给主线程执行,产生死锁。
#pragma mark- 同步 + 主线程 :死锁
-(void)syncMain {
NSLog(@"----%@",[NSThread currentThread] );
//1,获取并发队列,
dispatch_queue_t queue = dispatch_get_main_queue();
NSLog(@"start");
//2,同步函数把任务添加到队列
dispatch_sync(queue, ^{
NSLog(@"download1---%@",[NSThread currentThread]);
});
dispatch_sync(queue, ^{
NSLog(@"download2---%@",[NSThread currentThread]);
});
dispatch_sync(queue, ^{
NSLog(@"download3---%@",[NSThread currentThread]);
});
NSLog(@"end");
}
#pragma mark- 异步 + 主线程:所有任务都在主线程中进行,不会开线程
-(void)asyncMain {
NSLog(@"----%@",[NSThread currentThread] );
//1,获取并发队列,
dispatch_queue_t queue = dispatch_get_main_queue();
NSLog(@"start");
//2,异步函数把任务添加到队列
dispatch_async(queue, ^{
NSLog(@"download1---%@",[NSThread currentThread]);
});
dispatch_async(queue, ^{
NSLog(@"download2---%@",[NSThread currentThread]);
});
dispatch_async(queue, ^{
NSLog(@"download3---%@",[NSThread currentThread]);
});
NSLog(@"end");
}