//核心概念:
//任务:block
//队列:把任务放到队列里面,队列先进先出的原则,
//串行队列:顺序,一个一个执行(必须一个任务执行完了,才能从队列里面取出下一个任务)
//并发队列:同时,同时执行很多个任务(可以同时取出很多个任务,只要有线程去执行)
//同步sync:不会开新线程
//异步async:会开新线程,多线程的代名词
//串行队列同步执行:不开线程,在原来线程里面一个一个顺序执行
//串行队列异步执行:开一条线程,在这个新线程里面一个一个顺序执行
//并发队列异步执行:开多个线程,并发执行(不一定是一个一个)执行
//并发队列同步执行:不开线程,在原来线程里面一个一个顺序执行
//阶段性总结:
//1.开不开线程,由执行任务方法决定,同步不开线程,异步肯定开线程
//2.开多少线程,由队列决定,串行最多开一个线程,并发可以开多个线程。具体开多少个,有GCD底层决定,程序猿不能控制
-(void)touchesBegan:(NSSet*)touches withEvent:(UIEvent*)event {
[selfgcdTest7];
}
#pragma GCDG演练
-(void)gcdTest7{
dispatch_group_tgroup=dispatch_group_create();
dispatch_queue_tqueue=dispatch_get_global_queue(0,0);
dispatch_group_async(group, queue,^{
NSLog(@"bbb%@",[NSThreadcurrentThread]);
});
dispatch_group_async(group, queue,^{
NSLog(@"cc%@",[NSThreadcurrentThread]);
});
dispatch_group_async(group, queue,^{
NSLog(@"ddd%@",[NSThreadcurrentThread]);
});
dispatch_group_notify(group, queue,^{
NSLog(@"gaodig%@",[NSThreadcurrentThread]);
});
//最常用的在主线程中更新UI
dispatch_group_notify(group,dispatch_get_main_queue(),^{
;
});
}
-(void)gcdTest4
{
//1.并行队列
dispatch_queue_tqueue =dispatch_queue_create("cz",DISPATCH_QUEUE_CONCURRENT);
// 2.同步执行任务
for(inti =0; i <10; i++) {
dispatch_sync(queue,^{
NSLog(@"%@ %d", [NSThreadcurrentThread], i);
});
}
}
-(void)gcdTest3
{
//1.并行队列
dispatch_queue_tqueue =dispatch_queue_create("cz",DISPATCH_QUEUE_CONCURRENT);
NSLog(@"xx");
// 2.异步执行任务
for(inti =0; i <10; i++) {
NSLog(@"aaa");
dispatch_async(queue,^{
NSLog(@"%@ %d", [NSThreadcurrentThread], i);
});
NSLog(@"bbb");
}
NSLog(@"结束");
}
-(void)gcdTest2
{
// 1.串行队列
//下面两种写法是一样的
// dispatch_queue_t queue= dispatch_queue_create("itcast",DISPATCH_QUEUE_SERIAL);
dispatch_queue_tqueue =dispatch_queue_create("itcast",NULL);
// 2.异步执行
for(inti =0; i <10; i++) {
dispatch_async(queue,^{
NSLog(@"%@ %d", [NSThreadcurrentThread], i);
});
}
}
-(void)gcdTest1
{
// 1.创建一个串行队列
//参数:1.队列标签2.队列的属性
dispatch_queue_tqueue =dispatch_queue_create("itcast",DISPATCH_QUEUE_SERIAL);
NSLog(@"开始!!");
// 2.同步执行任务
//一般只要使用”同步“执行,串行队列对添加的同步任务,会立马执行
dispatch_sync(queue,^{
NSLog(@"%@",[NSThreadcurrentThread]);
});
NSLog(@"完成!!");
}
//主队列异步
-(void)gcdTest6{
dispatch_queue_tqueue=dispatch_get_main_queue();
NSLog(@"xx");
// 2.异步执行任务
for(inti =0; i <10; i++) {
NSLog(@"aaa");
dispatch_async(queue,^{
NSLog(@"%@ %d", [NSThreadcurrentThread], i);
});
NSLog(@"bbb");
}
NSLog(@"结束");
}