• OC 线程操作


    - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
        
    //    GCD 开几条线程并不是我们可以控制的,而是系统来决定的,
        
    //    [self asyncConcurrent];
    //    [self asyncSerial];
    //    [self syncConcurrent];
    //    [self syncSerial];
    //    [self test_get_global_queue];
    //   [self syncMain];//主线程操作直接死锁

        [NSThread detachNewThreadSelector:@selector(syncMain) toTarget:self withObject:nil];//在子线程地调用,会直接执行,不会死锁
      
    }
    
    
    /**
     异步函数 + 并发队列  :会开启多条线程,队列中的任务是异步执行的(并发执行)(无序执行的)
     */
    - (void)asyncConcurrent{
        
        //1.创建任务
        /*
         参数1:const char * _Nullable label  , C语言参数 字符串 ,标识符,为了区分队列的 推荐写法:反着写
         参数2:dispatch_queue_attr_t  _Nullable attr,队列类型
         DISPATCH_QUEUE_CONCURRENT 并发,
         DISPATCH_QUEUE_SERIAL 串行
         */
        dispatch_queue_t queue = dispatch_queue_create("com.520it.www", DISPATCH_QUEUE_CONCURRENT);
        
        //2  2.1封装任务 2.2添加到任务队列中
        /**
         dispatch_async(<#dispatch_queue_t  _Nonnull queue#>, <#^(void)block#>)
         参数1:dispatch_queue_t  _Nonnull queue 队列
         参数2:<#^(void)block#>  要执行的任务
         */
        dispatch_async(queue, ^{
            NSLog(@"打印一下111 --- %@", [NSThread currentThread]);
        });
        
        dispatch_async(queue, ^{
            NSLog(@"打印一下222 --- %@", [NSThread currentThread]);
        });
        
        dispatch_async(queue, ^{
            NSLog(@"打印一下333 --- %@", [NSThread currentThread]);
        });
    }
    
    
    /**
     异步函数 + 串行队列:可以开启线程,但是串行队列只会在同一个子线程执行
     */
    - (void)asyncSerial{
        dispatch_queue_t queue = dispatch_queue_create("asyncSerial", DISPATCH_QUEUE_SERIAL);
        dispatch_async(queue, ^{
            NSLog(@"打印一下111 --- %@", [NSThread currentThread]);
        });
        
        dispatch_async(queue, ^{
            NSLog(@"打印一下222 --- %@", [NSThread currentThread]);
        });
        
        dispatch_async(queue, ^{
            NSLog(@"打印一下333 --- %@", [NSThread currentThread]);
        });
    }
    
    
    /**
     同步函数 + 并发队列  :不会会开启多条线程,不管后面是并发还是串行,任务是串行执行的
     */
    - (void)syncConcurrent{
        
        //1.创建任务
    
        dispatch_queue_t queue = dispatch_queue_create("com.520it.www", DISPATCH_QUEUE_CONCURRENT);
    
        dispatch_sync(queue, ^{
            NSLog(@"打印一下111 --- %@", [NSThread currentThread]);
        });
        
        dispatch_sync(queue, ^{
            NSLog(@"打印一下222 --- %@", [NSThread currentThread]);
        });
        
        dispatch_sync(queue, ^{
            NSLog(@"打印一下333 --- %@", [NSThread currentThread]);
        });
    }
    
    /**
     同步函数 + 串行队列  :不会会开启多条线程,不管后面是并发还是串行,任务是串行执行的
     */
    - (void)syncSerial{
        dispatch_queue_t queue = dispatch_queue_create("syncSerial", DISPATCH_QUEUE_SERIAL);
        dispatch_sync(queue, ^{
            NSLog(@"打印一下111 --- %@", [NSThread currentThread]);
        });
        
        dispatch_sync(queue, ^{
            NSLog(@"打印一下222 --- %@", [NSThread currentThread]);
        });
        
        dispatch_sync(queue, ^{
            NSLog(@"打印一下333 --- %@", [NSThread currentThread]);
        });
    }
    
    
    
    /**
     获得全局队列
     */
    -(void)test_get_global_queue{
        
        /**
         获得全局并发队列 : 这个队列已经存在的, 我们只是获得
         参数1 : long identifier 优先级,
          DISPATCH_QUEUE_PRIORITY_HIGH 2
          DISPATCH_QUEUE_PRIORITY_DEFAULT 0
          DISPATCH_QUEUE_PRIORITY_LOW (-2)
          DISPATCH_QUEUE_PRIORITY_BACKGROUND INT16_MIN    这是最低的优先级
         
         参数2 : unsigned long flags 给未来使用, 总是给个0
         */
        dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
        dispatch_async(queue, ^{
            NSLog(@"打印一下111 --- %@", [NSThread currentThread]);
        });
        
        dispatch_async(queue, ^{
            NSLog(@"打印一下222 --- %@", [NSThread currentThread]);
        });
        
        dispatch_async(queue, ^{
            NSLog(@"打印一下333 --- %@", [NSThread currentThread]);
        });
    }
    

      

    1.

    2

     
    3.

     
    4.

    5.

     
    8. 

  • 相关阅读:
    vue2:p26 webpack利用cleanwebpackplugin自动清理dist目录生成的旧生产文件
    在CentOS中安装和使用nginx
    无法下载外网Docker镜像的解决方案
    gofs使用教程基于golang的开源跨平台文件同步工具
    Stream API 简单介绍入门使用
    .npmrc 项目的 默认安装配置
    ncc koa 后台源码加密打包工具 @vercel/ncc webpack node打包更正规
    koa 文件下载 pdf预览 两个接口 nodejs chromeDownload chromePreview
    koagenerator koa 脚手架
    tag 转 分支 branch
  • 原文地址:https://www.cnblogs.com/qingzZ/p/9227965.html
Copyright © 2020-2023  润新知