GCD--队列的类型和执行任务方式的四种的排列组合
来源:互联网 发布:java夜校和java面授 编辑:程序博客网 时间:2024/04/28 03:37
串行队列
- 串行队列同步执行
- (IBAction)SerialQueueSync:(id)sender { //1.创建串行队列 dispatch_queue_t queue = dispatch_queue_create("FirstSerialQueue", DISPATCH_QUEUE_SERIAL); //2.提交任务到队列中(block) //同步执行任务 dispatch_sync(queue, ^{ //任务逻辑 for (int i = 0; i < 10; i++) { [NSThread sleepForTimeInterval:1]; NSLog(@"++++++++++%@", [NSThread currentThread]); } }); NSLog(@"第一个打印完毕"); //第二个任务 dispatch_sync(queue, ^{ for (int i = 0; i < 10; i++) { [NSThread sleepForTimeInterval:1]; NSLog(@"----------%@", [NSThread currentThread]); } }); NSLog(@"第二个打印完毕");}
- 串行队列异步执行
- (IBAction)SerialQueueAsync:(id)sender { dispatch_queue_t queue = dispatch_queue_create("SecondSerialQueue", DISPATCH_QUEUE_SERIAL); dispatch_async(queue, ^{ for (int i = 0; i < 10; i++) { [NSThread sleepForTimeInterval:1]; NSLog(@"++++++++++%@", [NSThread currentThread]); } }); NSLog(@"第一个打印完毕"); dispatch_async(queue, ^{ for (int i = 0; i < 10; i++) { [NSThread sleepForTimeInterval:1]; NSLog(@"----------%@", [NSThread currentThread]); } }); NSLog(@"第二个打印完毕");}
并行队列
- 并行队列同步执行
//几乎不用这种组合(串行队列+同步执行结果一样)- (IBAction)concurrentQueueSync:(id)sender { dispatch_queue_t queue = dispatch_queue_create("FirstConcurrentQueue", DISPATCH_QUEUE_CONCURRENT); dispatch_sync(queue, ^{ for (int i = 0; i < 10; i++) { [NSThread sleepForTimeInterval:1]; NSLog(@"++++++++++%@", [NSThread currentThread]); } }); NSLog(@"第一个打印完毕"); dispatch_sync(queue, ^{ for (int i = 0; i < 10; i++) { [NSThread sleepForTimeInterval:1]; NSLog(@"----------%@", [NSThread currentThread]); } }); NSLog(@"第二个打印完毕");}
- 并行队列异步执行
- (IBAction)concurrentQueuAsync:(id)sender { dispatch_queue_t queue = dispatch_queue_create("SecondConcurrentQueue", DISPATCH_QUEUE_CONCURRENT); dispatch_async(queue, ^{ for (int i = 0; i < 10; i++) { [NSThread sleepForTimeInterval:1]; NSLog(@"++++++++++%@", [NSThread currentThread]); } }); NSLog(@"第一个打印完毕"); dispatch_async(queue, ^{ for (int i = 0; i < 10; i++) { [NSThread sleepForTimeInterval:1]; NSLog(@"----------%@", [NSThread currentThread]); } }); NSLog(@"第二个打印完毕");}
全局队列
- 全局队列异步执行
//和并行队列异步执行一模一样- (IBAction)globalQueueAsync:(id)sender { //获取系统默认创建的全局队列(参数一:给定队列的优先级) dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); //提交任务到全局队列中 dispatch_async(queue, ^{ for (int i = 0; i < 10; i++) { [NSThread sleepForTimeInterval:1]; NSLog(@"++++++++++++:%@",[NSThread currentThread]); } }); NSLog(@"第一个打印完毕"); dispatch_async(queue, ^{ for (int i = 0; i < 10; i++) { [NSThread sleepForTimeInterval:1]; NSLog(@"----------%@", [NSThread currentThread]); } }); NSLog(@"第二个打印完毕");}
主队列
- 主队列异步执行
- (IBAction)mainQueueAsync:(id)sender { //注意:所有主队列中的任务都是由主线程完成 //获取系统默认创建好的主队列 dispatch_queue_t queue = dispatch_get_main_queue(); //提交任务到主队列中 dispatch_async(queue, ^{ for (int i = 0; i < 10; i++) { [NSThread sleepForTimeInterval:1]; NSLog(@"++++++++++%@", [NSThread currentThread]); } }); NSLog(@"第一个打印完毕"); dispatch_async(queue, ^{ for (int i = 0; i < 10; i++) { [NSThread sleepForTimeInterval:1]; NSLog(@"----------%@", [NSThread currentThread]); } }); NSLog(@"第二个打印完毕");}
- 主队列同步执行
//死锁问题(任务不要放到主队列中并且同步执行)- (IBAction)mainQueueSync:(id)sender { //主队列同步执行 NSLog(@"任务一"); dispatch_sync(dispatch_get_main_queue(), ^{ NSLog(@"任务二"); }); NSLog(@"任务三");}
0 0
- GCD--队列的类型和执行任务方式的四种的排列组合
- 理解GCD中任务和队列执行的原理
- iOS多线程中,队列和执行的排列组合结果分析
- 多线程GCD的详细讲解 任务和队列(串行队列,并发队列) (一)
- 多线程GCD的详细讲解 任务和队列(串行队列,并发队列)
- GCD-同步,异步分别在串行队列,并发队列,主队列下的执行方式
- 关于GCD中串行队列、并发队列和同步执行、异步执行的探讨
- GCD各种队列的执行效果
- GCD:dispatch_sync会在当前线程中执行派发到其他队列的任务
- GCD之主队列、全局并发队列、以及同步任务的执行
- iOS-GCD的串行队列和并行队列的任务及实现
- GCD编程dispatch_sync(同步)和dispatch_async(异步)方式执行并发队列任务区别
- 4.iOS多线程中,GCD技术的队列与执行方式的组合结果
- GCD的串行队列和并行队列
- GCD的四种队列,两种函数和六种组合
- 任务顺序执行的几种方式
- GCD实现异步任务同步的两种方式
- hdu 4497 (gcd和lcm的性质+排列组合)
- 电力企业信息化建设方案之调度信息报送系统
- KING_Unity学习之UGUI_Canvas渲染顺序以及层次关系总结
- [Android]在安桌客户端解析json字符串
- centos添加普通用户,操作权限设置
- Android ViewPager+HorizontalScrollView实现标题栏滑动(腾讯新闻)
- GCD--队列的类型和执行任务方式的四种的排列组合
- 黑马程序员——抽象类与接口
- java操作POI 错误 org.apache.xmlbeans.XmlOptions
- 【Html】水平居中总结-不定宽块状元素方法(三)
- perl 自定义请求头
- H264学习笔记(1):视频压缩编码的基本原理
- Fragment管理工具实现Fragment之间切换
- JAVA自学练习--汉诺塔初级递归算法
- mac下搭建php环境