美文网首页
主线程和主队列

主线程和主队列

作者: 迷路的安然和无恙 | 来源:发表于2019-04-16 18:26 被阅读0次

先从一道面试题开始:

- (void)viewDidLoad {
    [super viewDidLoad];
    
    dispatch_async(dispatch_get_main_queue(), ^{
        NSLog(@"1");
    });
    
    NSLog(@"2");
    
    dispatch_sync(dispatch_get_main_queue(), ^{
        NSLog(@"3");
    });
    
    NSLog(@"4");
}

程序怎么执行?
答案是:控制台只打印2。

在程序执行到dispatch_async

dispatch_async(dispatch_get_main_queue(), ^{
    NSLog(@"1");
});

意思是,当主线程空闲的时候,需要将NSLog1的任务添加到主队列中,但此时,主线程中还有NSLog2的任务。于是,该任务并没有加入到主队列中,而是去先执行NSLog2,NSLog2后依然有任务。
dispatch_sync是让当前线程立即执行当前队列中的任务,但是当前队列需要等待主线程空闲才能添加任务,此时主线程并不空闲,so,相互等待。所有需要等主线程空闲时添加的任务均不会执行了。

相关文章

  • GCD

    GCD 队列与线程的关系 主队列和主线程 『ios』主线程 和 主队列的关系,绝对安全的UI操作,主线程中一定是主...

  • iOS线程安全问题

    多线程 线程与队列区别 程序分为主线程与子线程, 主线程主要用来更新队列,而主线程所有要处理的事务都放在主队列,主...

  • iOS开发—GCD笔记

    多线程,主GCD 串行队列(Serial Dispatch Queue,等待现有处理结束) 并行队列�(Concu...

  • iOS开发笔记-多线程的使用方法

    多线程方式一:GCD队列的3个种类: 自建队列: 分并行/串行 全局队列: 属于并行队列, 是系统默认创建的. 主...

  • DPDK-suricata

    一 线程 单网卡单队列,worker模式下的线程情况: 二 线程堆栈 2.1 2号线程中断处理线程 中断线程执行主...

  • 【Flask】简单的后台异步队列

    异步任务队列 异步队列输入 异步队列获取并执行 创建线程开始执行方法并返回进程号 主函数与flask main一起...

  • Android 中的多线程

    Android 中的多线程 Handler Handler必须在主线程中创建。 默认情况下,消息队列只有一个,即主...

  • GCD分析(中)

    同步函数死锁 死锁现象 主线程因为同步函数的原因等着先执⾏任务 主队列等着主线程的任务执⾏完毕再执⾏⾃⼰的任务 主...

  • iOS笔记-多线程

    同步函数&串行队列 不会开启线程,在当前线程执行任务 任务串行执行,任务一个接着一个 会产生堵塞(死锁,崩溃) 主...

  • 并发环境下指令重排带来的问题

    JVM内存模型 - 主内存和线程独立的工作内存Java内存模型规定,对于多个线程共享的变量,存储在主内存当中,每个...

网友评论

      本文标题:主线程和主队列

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