zoukankan      html  css  js  c++  java
  • 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");
    }
  • 相关阅读:
    CSS3学习笔记
    ie6对hover兼容性问题的解决:
    Maven-- 操作指南
    java基础 -- json多层转换成对象
    idea 导入maven项目
    工具的使用与安装--JAVA 环境变量的配置
    FreeMarker语言
    Apache Shiro 安全框架
    java基础--内部类
    java框架--Model层框架 sorm
  • 原文地址:https://www.cnblogs.com/ZhangShengjie/p/12218733.html
Copyright © 2011-2022 走看看