// dispatch_queue_t queue = dispatch_get_global_queue(0, 0); //全局队列 dispatch_queue_t queue3 = dispatch_queue_create("queu3", DISPATCH_QUEUE_CONCURRENT);//并发队列 dispatch_queue_t queue = dispatch_queue_create("myquene", DISPATCH_QUEUE_SERIAL);//串行队列 dispatch_async(queue, ^{ for (int i =0; i<10; i++) { NSLog(@"0-----%@",[NSThread currentThread]); } }); dispatch_async(queue, ^{ for (int i =0; i<10; i++) { NSLog(@"1-----%@",[NSThread currentThread]); } });
全局队列、全局只存在一个 也是并发队列
并发队列、创建一个就是一个新的队列
// dispatch_sync和dispatch_async用来控制是否要开启新的线程 /** 队列的类型,决定了任务的执行方式(并发、串行) 1.并发队列 2.串行队列 3.主队列(也是一个串行队列) */ - (void)interview01 { // 问题:以下代码是在主线程执行的,会不会产生死锁?会! NSLog(@"执行任务1"); dispatch_queue_t queue = dispatch_get_main_queue(); dispatch_sync(queue, ^{ NSLog(@"执行任务2"); }); NSLog(@"执行任务3"); // dispatch_sync立马在当前线程同步执行任务 } - (void)interview02 { // 问题:以下代码是在主线程执行的,会不会产生死锁?不会! NSLog(@"执行任务1"); dispatch_queue_t queue = dispatch_get_main_queue(); dispatch_async(queue, ^{ NSLog(@"执行任务2"); }); NSLog(@"执行任务3"); // dispatch_async不要求立马在当前线程同步执行任务 } - (void)interview03 { // 问题:以下代码是在主线程执行的,会不会产生死锁?会! NSLog(@"执行任务1"); dispatch_queue_t queue = dispatch_queue_create("myqueu", DISPATCH_QUEUE_SERIAL); dispatch_async(queue, ^{ // 0 NSLog(@"执行任务2"); dispatch_sync(queue, ^{ // 1 NSLog(@"执行任务3"); }); NSLog(@"执行任务4"); }); NSLog(@"执行任务5"); } - (void)interview04 { // 问题:以下代码是在主线程执行的,会不会产生死锁?不会! NSLog(@"执行任务1"); dispatch_queue_t queue = dispatch_queue_create("myqueu", DISPATCH_QUEUE_SERIAL); // dispatch_queue_t queue2 = dispatch_queue_create("myqueu2", DISPATCH_QUEUE_CONCURRENT); dispatch_queue_t queue2 = dispatch_queue_create("myqueu2", DISPATCH_QUEUE_SERIAL); dispatch_async(queue, ^{ // 0 NSLog(@"执行任务2"); dispatch_sync(queue2, ^{ // 1 NSLog(@"执行任务3"); }); NSLog(@"执行任务4"); }); NSLog(@"执行任务5"); } - (void)interview05 { // 问题:以下代码是在主线程执行的,会不会产生死锁?不会! NSLog(@"执行任务1"); dispatch_queue_t queue = dispatch_queue_create("myqueu", DISPATCH_QUEUE_CONCURRENT); dispatch_async(queue, ^{ // 0 NSLog(@"执行任务2"); dispatch_sync(queue, ^{ // 1 NSLog(@"执行任务3"); }); NSLog(@"执行任务4"); }); NSLog(@"执行任务5"); }