美文网首页
多线程的应用场景

多线程的应用场景

作者: 参天草 | 来源:发表于2018-03-23 15:49 被阅读0次

GCD线程间通信

//0.获取一个全局的队列

dispatch_queue_tqueue = dispatch_get_global_queue(0,0);

//1.先开启一个线程,把下载图片的操作放在子线程中处理

dispatch_async(queue, ^{

//2.下载图片

NSURL*url = [NSURLURLWithString:@"http://h.hiphotos.baidu.com/zhidao/pic/item/6a63f6246b600c3320b14bb3184c510fd8f9a185.jpg"];

NSData*data = [NSDatadataWithContentsOfURL:url];

UIImage*image = [UIImageimageWithData:data];

NSLog(@"下载操作所在的线程--%@",[NSThreadcurrentThread]);

//3.回到主线程刷新UI

dispatch_async(dispatch_get_main_queue(), ^{

self.imageView.image= image;

//打印查看当前线程

NSLog(@"刷新UI---%@",[NSThreadcurrentThread]);

});

});

信号量和group结合解决多个请求回来才更新ui

//网络请求都成功才更新UI

   dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);

   //创建全局并行

   dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

   dispatch_group_t group = dispatch_group_create();

   dispatch_group_async(group, queue, ^{

       //加载订单消息数据

       [[HCViewModel sharedViewModel] loadMessageWithPara:@"1" and:^(NSMutableArray *magerAddressArr) {

           dispatch_semaphore_signal(semaphore);

           self.orderMessagelistArr = magerAddressArr;

       } and:^(NSError *error) {

           //请求错误回调

           [self hc_failRequestWitherror:error];

       }];

   });

   dispatch_group_async(group, queue, ^{

       [[HCViewModel sharedViewModel] loadMessageWithPara:@"2" and:^(NSMutableArray *magerAddressArr) {

           dispatch_semaphore_signal(semaphore);

           //加载系统消息数据

           self.systemMessagelistArr = magerAddressArr;

       } and:^(NSError *error) {

           //请求错误回调

           [self hc_failRequestWitherror:error];

       }];

   });

   dispatch_group_notify(group, queue, ^{

       //2个请求对应四次信号等待

       dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);

       dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);

       dispatch_async(dispatch_get_main_queue(), ^{

           //更新UI操作

           self.dataList = [NSMutableArray arrayWithObjects:@1,@2, nil];

           [self.tableView reloadData];

       });

   });

相关文章

  • 多线程应用场景

    多线程使用的主要目的在于: 1、吞吐量:你做WEB,容器帮你做了多线程,但是他只能帮你做请求层面的。简单的说,可能...

  • 多线程应用场景

    多线程运行定时任务: 重写Spring定时器线程池,每次使用时根据注解@Scheduled(cron = "0 0...

  • 多线程的应用场景

    GCD线程间通信 //0.获取一个全局的队列 dispatch_queue_tqueue=dispatch_get...

  • Balking模式

    Balking模式:“多线程版本的if”的应用场景。 1,使用synchronized实现Balking模式,这种...

  • iOS GCD信号量

    信号量:多线程环境下的一种保护措施,保证两个或多个代码不会被并发调用。 应用场景:在多线程并发的场景,通过控制信号...

  • 创建多少线程才是合适的?

    多线程的应用场景要解决这个问题,首先要分析以下两个问题: 1 为什么要使用多线程? 使用多线程,本质上就是提升程序...

  • Android 线程间通信

    Android系统为多线程提供的几种方案以及各自应用场景 1、异步任务 AsyncTaskAsyncTask是切换...

  • 线程安全知多少

    1. 如何定义线程安全 线程安全,拆开来看: 线程:指多线程的应用场景下。 安全:指数据安全。 多线程就不用过多介...

  • 一定要偷偷学,偷偷进步!腾讯内部首发Java多线程、高并发、设计

    Java编程语言是工业级的编程语言,在诸多应用、诸多场景下被广泛使用,多线程技术作为Java语言和应用的基础能力,...

  • Java volatile变量 原理与应用

    本文讨论volatile的原理和应用场景,涉及多线程内存模型、指令重排(代码执行次序)、Happens-befor...

网友评论

      本文标题:多线程的应用场景

      本文链接:https://www.haomeiwen.com/subject/phsxcftx.html