GCD多线程 (以前的代码)

2017-09-15  本文已影响4人  sll_

//核心概念:

//任务: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(@"结束");

}

上一篇 下一篇

猜你喜欢

热点阅读