4.4 异步执行 + 串行队列
会开启新线程,但是因为任务是串行的,执行完一个任务,再执行下一个任务
/**
* 异步执行 + 串行队列
* 特点:会开启新线程,但是因为任务是串行的,执行完一个任务,再执行下一个任务。
*/
- (void)asyncSerial {
NSLog(@"currentThread---%@",[NSThread currentThread]); // 打印当前线程
NSLog(@"asyncSerial---begin");
dispatch_queue_t queue = dispatch_queue_create("net.bujige.testQueue", DISPATCH_QUEUE_SERIAL);
dispatch_async(queue, ^{
// 追加任务1
for (int i = 0; i < 2; ++i) {
[NSThread sleepForTimeInterval:2]; // 模拟耗时操作
NSLog(@"1---%@",[NSThread currentThread]); // 打印当前线程
}
});
dispatch_async(queue, ^{
// 追加任务2
for (int i = 0; i < 2; ++i) {
[NSThread sleepForTimeInterval:2]; // 模拟耗时操作
NSLog(@"2---%@",[NSThread currentThread]); // 打印当前线程
}
});
dispatch_async(queue, ^{
// 追加任务3
for (int i = 0; i < 2; ++i) {
[NSThread sleepForTimeInterval:2]; // 模拟耗时操作
NSLog(@"3---%@",[NSThread currentThread]); // 打印当前线程
}
});
NSLog(@"asyncSerial---end");
}
image.png
在异步执行 + 串行队列可以看到:
- 开启了一条新线程(异步执行具备开启新线程的能力,串行队列只开启一个线程)。
- 所有任务是在打印的syncConcurrent---begin和syncConcurrent---end之后才开始执行的(异步执行不会做任何等待,可以继续执行任务)。
- 任务是按顺序执行的(串行队列每次只有一个任务被执行,任务一个接一个按顺序执行)。
下一章讲讲刚才我们提到过的特殊队列:主队列。
主队列:GCD自带的一种特殊的串行队列
- 所有放在主队列中的任务,都会放到主线程中执行
- 可使用dispatch_get_main_queue()获得主队列
本文摘自网上,觉得比较好希望跟大家分享一下,如有侵权,请联系小编删除,并且在此给大家推荐一个学习交流的iOS学习交流q-un,681-503-716,加群验证填(雁横)或者文章的名字就行,大家能够看到我的文章也是缘分,而且也希望看到我文章的朋友们可以一起交流,学习。
网友评论