打印结果:
| 1 2 3 4 5 |
---start--- 任务1---{number = 1, name = main} 任务2---{number = 1, name = main} 任务3---{number = 1, name = main} ---end--- |
解释
这里的执行原理和步骤图跟“同步执行+并发队列”是一样的,只要是同步执行就没法开启新的线程,所以多个任务之间也一样只能按顺序来执行,
(五)异步执行+主队列
实现代码:
- (void)asyncMain{
//获取主队列
dispatch_queue_t queue = dispatch_get_main_queue();
NSLog(@"---start---");
//使用异步函数封装三个任务
dispatch_async(queue, ^{
NSLog(@"任务1---%@", [NSThread currentThread]);
});
dispatch_async(queue, ^{
NSLog(@"任务2---%@", [NSThread currentThread]);
});
dispatch_async(queue, ^{
NSLog(@"任务3---%@", [NSThread currentThread]);
});
NSLog(@"---end---");
}
打印结果:
| 1 2 3 4 5 |
---start--- ---end--- 任务1---{number = 1, name = main} 任务2---{number = 1, name = main} 任务3---{number = 1, name = main} |
解释
异步执行意味着
可以开启新的线程
任务可以先绕过不执行,回头再来执行
主队列跟串行队列的区别
队列中的任务一样要按顺序执行
主队列中的任务必须在主线程中执行,不允许在子线程中执行
以上条件组合后得出结果:
所有任务都可以先跳过,之后再来“按顺序”执行










