#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
死锁 在主队列里面 在主线程执行同步任务
同步执行 一个任务执行完毕之后 再去执行另外一个任务
主队列(GCD)同步执行某个任务的时候 会等待前面的任务 执行完毕之后 再去执行主队列里面的任务
主队列是在主线程里面同步执行任务的 它们在同一个线程里面 线程是顺序执行的这时候主线程会等主队列里面的任务执行完毕 再去执行主线程 主线程执行完毕才回去执行主队列里面的任务 从而出现死锁
通过GCD获得主队列dispatch_get_main_queue
所有接收队列对象 都用dispatch_queue_t
dispatch_queue_t mainQueue = dispatch_get_main_queue();
同步执行任务
dispatch_sync(mainQueue, ^{
NSLog(@"000000");
});
异步执行
异步 允许开辟一个线程(利用系统空闲时间去执行 程序员 不能控制)
同步不可以开辟线程 (同步顺序执行)
dispatch_async(mainQueue, ^{
NSLog(@"%@ %d",[NSThread currentThread],i);
});
dispatch_get_main_queue()属于串行队列
dispatch_queue_create("", null)属于串行队列
串行队列按照顺序去执行队列的任务
/**
dispatch_queue_t mainQueue = dispatch_get_main_queue();
dispatch_async(mainQueue, ^{
NSLog(@"11111");
});
dispatch_async(mainQueue, ^{
NSLog(@"22222");
});
dispatch_async(mainQueue, ^{
NSLog(@"3333333");
});
dispatch_async(mainQueue, ^{
NSLog(@"44444444");
});
*/
/**
自己创建队列的方式
dispatch_queue_t huluwaqueue = dispatch_queue_create("huluwa", DISPATCH_QUEUE_CONCURRENT);
for (int i = 0; i < 5; i ++) {
dispatch_async(huluwaqueue, ^{
// NSLog(@"11111");
NSLog(@"%@ %d",[NSThread currentThread],i);
});
}
*/
/**
//#define DISPATCH_QUEUE_PRIORITY_HIGH 2 // 高
//#define DISPATCH_QUEUE_PRIORITY_DEFAULT 0 // 默认(中)
//#define DISPATCH_QUEUE_PRIORITY_LOW (-2) // 低
//#define DISPATCH_QUEUE_PRIORITY_BACKGROUND INT16_MIN // 后台
// gcd 默认提供了全局的并发队列 供整个应用程序使用 不需要手动创建
dispatch_queue_t quanjuQueue1 = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0);
dispatch_queue_t quanjuQueue2 = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0);
dispatch_queue_t quanjuQueue3 = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_async(quanjuQueue1, ^{
NSLog(@"11111");
NSLog(@"11%@",[NSThread currentThread]);
});
dispatch_async(quanjuQueue2, ^{
NSLog(@"2222");
NSLog(@"22%@",[NSThread currentThread]);
});
dispatch_async(quanjuQueue3, ^{
NSLog(@"33333");
NSLog(@"33%@",[NSThread currentThread]);
});
*/
/**
// 创建分组dispatch_group_create()
// dispatch_group_t 相当于 类名
dispatch_group_t num1 = dispatch_group_create();
dispatch_queue_t queue1 = dispatch_queue_create("num1",NULL);
for (int i = 0; i < 5; i ++) {
dispatch_group_async(num1, queue1, ^{
NSLog(@"download2");
});
}
// 分组执行完毕 调用这个方法
dispatch_group_notify(num1, queue1, ^{
NSLog(@"执行完毕的代码1");
});
dispatch_group_t num2 = dispatch_group_create();
dispatch_queue_t queue2 = dispatch_queue_create("num1",NULL);
for (int i = 0; i < 3; i ++) {
dispatch_group_async(num2, queue2, ^{
NSLog(@"download3");
});
}
// 分组执行完毕 调用这个方法
dispatch_group_notify(num2, queue2, ^{
NSLog(@"执行完毕的代码2");
});
*/
}
@end