- 队列
第一个参数:C语言字符串,标签
第二个参数:
DISPATCH_QUEUE_CONCURRENT:并发队列
DISPATCH_QUEUE_SERIAL:串行队列
dispatch_queue_t queue = dispatch_queue_create("com.520it.download", DISPATCH_QUEUE_CONCURRENT);//并发队列
dispatch_queue_t queue = dispatch_queue_create("com.520it.download", DISPATCH_QUEUE_SERIAL);//串行队列
- //获取全局并发队列(GCD默认已经提供了全局的并发队列,供整个应用使用,可以无需手动创建)
/*
第一个参数:队列的优先级:
#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 // 后台
第二个参数:永远传0
*/
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
- 使用dispatch_get_main_queue()获得主队列
dispatch_queue_t queue = dispatch_get_main_queue();
并发队列 |
手动创建的串行队列 |
主队列 | |
同步(sync) |
没有开启新线程
串行执行任务
|
没有开启新线程
串行执行任务
|
没有开启新线程
串行执行任务
|
异步(async) |
有开启新线程
并发执行任务
|
有开启新线程
串行执行任务
|
没有开启新线程
串行执行任务
|

1 //同步函数+主队列:死锁 2 -(void)syncMain 3 { 4 NSLog(@"----"); 5 //1.获得主队列 6 dispatch_queue_t queue = dispatch_get_main_queue(); 7 8 //2.同步函数 9 dispatch_sync(queue, ^{ 10 NSLog(@"---download1---%@",[NSThread currentThread]); 11 }); 12 13 dispatch_sync(queue, ^{ 14 NSLog(@"---download2---%@",[NSThread currentThread]); 15 }); 16 17 dispatch_sync(queue, ^{ 18 NSLog(@"---download3---%@",[NSThread currentThread]); 19 }); 20 dispatch_sync(queue, ^{ 21 NSLog(@"---download4---%@",[NSThread currentThread]); 22 }); 23 24 } 25 26 27 //异步函数+主队列:不会开线程,任务串行执行 28 -(void)asyncMain 29 { 30 //1.获得主队列 31 dispatch_queue_t queue = dispatch_get_main_queue(); 32 33 //2.异步函数 34 dispatch_async(queue, ^{ 35 NSLog(@"---download1---%@",[NSThread currentThread]); 36 }); 37 38 dispatch_async(queue, ^{ 39 NSLog(@"---download2---%@",[NSThread currentThread]); 40 }); 41 42 dispatch_async(queue, ^{ 43 NSLog(@"---download3---%@",[NSThread currentThread]); 44 }); 45 dispatch_async(queue, ^{ 46 NSLog(@"---download4---%@",[NSThread currentThread]); 47 }); 48 49 } 50 51 //同步函数+串行队列:不会开线程,任务串行执行 52 -(void)syncSerial 53 { 54 55 //创建串行队列 56 /* 57 第一个参数:C语言字符串,标签 58 第二个参数: 59 DISPATCH_QUEUE_CONCURRENT:并发队列 60 DISPATCH_QUEUE_SERIAL:串行队列 61 */ 62 dispatch_queue_t queue = dispatch_queue_create("com.520it.download", DISPATCH_QUEUE_SERIAL); 63 64 dispatch_sync(queue, ^{ 65 NSLog(@"---download1---%@",[NSThread currentThread]); 66 }); 67 68 dispatch_sync(queue, ^{ 69 NSLog(@"---download2---%@",[NSThread currentThread]); 70 }); 71 72 dispatch_sync(queue, ^{ 73 NSLog(@"---download3---%@",[NSThread currentThread]); 74 }); 75 dispatch_sync(queue, ^{ 76 NSLog(@"---download4---%@",[NSThread currentThread]); 77 }); 78 } 79 //同步函数+并发队列:不会开线程,任务串行执行 80 -(void)syncConcurrent 81 { 82 dispatch_queue_t queue = dispatch_get_global_queue(0, 0); 83 84 NSLog(@"--syncConcurrent--start-"); 85 86 dispatch_sync(queue, ^{ 87 NSLog(@"---download1---%@",[NSThread currentThread]); 88 }); 89 90 dispatch_sync(queue, ^{ 91 NSLog(@"---download2---%@",[NSThread currentThread]); 92 }); 93 94 dispatch_sync(queue, ^{ 95 NSLog(@"---download3---%@",[NSThread currentThread]); 96 }); 97 dispatch_sync(queue, ^{ 98 NSLog(@"---download4---%@",[NSThread currentThread]); 99 }); 100 101 NSLog(@"--syncConcurrent--end-"); 102 } 103 //异步函数+串行队列:会开启一条线程,任务串行执行 104 -(void)asyncSerial 105 { 106 //创建串行队列 107 /* 108 第一个参数:C语言字符串,标签 109 第二个参数: 110 DISPATCH_QUEUE_CONCURRENT:并发队列 111 DISPATCH_QUEUE_SERIAL:串行队列 112 */ 113 dispatch_queue_t queue = dispatch_queue_create("com.520it.download", DISPATCH_QUEUE_SERIAL); 114 115 dispatch_async(queue, ^{ 116 NSLog(@"---download1---%@",[NSThread currentThread]); 117 }); 118 119 dispatch_async(queue, ^{ 120 NSLog(@"---download2---%@",[NSThread currentThread]); 121 }); 122 123 dispatch_async(queue, ^{ 124 NSLog(@"---download3---%@",[NSThread currentThread]); 125 }); 126 dispatch_async(queue, ^{ 127 NSLog(@"---download4---%@",[NSThread currentThread]); 128 }); 129 } 130 //异步函数+并发队列:会开启新的线程,并发执行 131 -(void)asyncCONCURRENT 132 { 133 //创建并发队列 134 /* 135 第一个参数:C语言字符串,标签 136 第二个参数: 137 DISPATCH_QUEUE_CONCURRENT:并发队列 138 DISPATCH_QUEUE_SERIAL:串行队列 139 */ 140 // dispatch_queue_t queue = dispatch_queue_create("com.520it.download", DISPATCH_QUEUE_CONCURRENT); 141 NSLog(@"--asyncCONCURRENT--start-"); 142 //获得全局并发队列 143 /* 144 第一个参数:队列的优先级DISPATCH_QUEUE_PRIORITY_DEFAULT 145 第二个参数:永远传0 146 */ 147 dispatch_queue_t queue = dispatch_get_global_queue(0, 0); 148 //异步函数 149 /* 150 第一个参数:队列 151 第二个参数:block,在里面封装任务 152 */ 153 dispatch_async(queue, ^{ 154 NSLog(@"---download1---%@",[NSThread currentThread]); 155 }); 156 157 dispatch_async(queue, ^{ 158 NSLog(@"---download2---%@",[NSThread currentThread]); 159 }); 160 161 dispatch_async(queue, ^{ 162 NSLog(@"---download3---%@",[NSThread currentThread]); 163 }); 164 dispatch_async(queue, ^{ 165 NSLog(@"---download4---%@",[NSThread currentThread]); 166 }); 167 168 NSLog(@"--asyncCONCURRENT--end-"); 169 }