• IOS 网络多线程-并发-串行队列


    //    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");
    }
  • 相关阅读:
    【记录】百度统计监控博客园
    【织梦】网站地图创建和美化
    【IDE】JRebel热部署实现
    【字体图标】 Font Awesome字体图标如何使用?
    【Eureka】springCloud项目搭建
    java 服务定期卡顿、卡死,服务在运行没挂,日志疯狂打印,接口不能用
    idea springboot 无法启动 Unable to start EmbeddedWebApplicationContext
    POI导出xlsx
    mysql decimal设置默认值0 无效,设置后自动变为null(通过Navicat可视化工具操作)
    Log file ./ib_logfile2 is of different size 268435456 bytes than other log files 50331648 bytes!
  • 原文地址:https://www.cnblogs.com/ZhangShengjie/p/12218733.html
Copyright © 2020-2023  润新知