zoukankan      html  css  js  c++  java
  • 多线程之NSOpertionQueue操作队列

    //NSOpertionQueue   NSOperation
        //Queue
        //主队列 和 自定义队列
        //主队列是运行在主线程当中,自定义队列运行在后台
        //NSOperation  定义需要执行的操作(任务)
        //定义需要的操作,然后把该操作添加到合适的队列中
        //三个步骤
        //1.创建队列对象
        //2.创建操作对象
        //3.把操作对象添加到队列之中,等待队列分配线程执行操作
    
        //1.创建队列
        NSOperationQueue *queue = [[NSOperationQueue alloc] init];
        //设置最大并发操作数
        //队列中最多有几个操作同时执行
        queue.maxConcurrentOperationCount = 1;
        //是否暂停执行队列中的线程
        [queue setSuspended:YES];
        //2.创建操作
        //NSOperation 不能直接使用
        //使用子类的对象  两种方式1、直接创建 2、使用block创建
        NSOperation *op1 = [[NSInvocationOperation alloc] initWithTarget:self
                                                                selector:@selector(thread1:)
                                                                  object:@"op1 "];
       
        NSOperation *op2 = [[NSInvocationOperation alloc] initWithTarget:self
                                                                selector:@selector(thread2:)
                                                                  object:@"op2 "];
        /*
        NSBlockOperation *op3 = [[NSBlockOperation alloc] init];
        [op3 addExecutionBlock:^{
            //具体要执行的操作
        }];
         */
        //3.把操作加入到队列中
        [queue addOperation:op1];
        [queue addOperation:op2];
        //加入之后,如果有操作,那队列就会自动执行
        //4.设置操作的优先级
        [op1 setQueuePriority:NSOperationQueuePriorityLow];
        [op2 setQueuePriority:NSOperationQueuePriorityVeryHigh];
        //5.设置操作之间的依赖关系
        [op2 addDependency:op1];    //op2的执行依赖于op1,保证op1肯定op2之前执行
        //是否重新让队列执行
        [queue setSuspended:NO];  
        //回到主线程打印输出
        for (int i = 0; i < 50; i ++) {
            NSLog(@"主线程 : %d", i);
        }
    }
    
    - (void)thread1:(NSString *)name
    {
        //具体要执行的操作
        for (int i = 0; i < 50; i ++) {
            NSLog(@"多线程 %@:     %d", name, i);
        }
    }
    
    - (void)thread2:(NSString *)name
    {
        for (int i = 0; i < 50; i ++) {
            NSLog(@"多线程 %@:     %d", name, i);
        }
    }
  • 相关阅读:
    BUAA面向对象第一单元作业总结
    Kafka 总结学习
    Mybatis学习-GetMybatisInMyHead
    大数据实战-电信客服-重点记录
    基于有穷状态机思想的电梯系统
    Selective Search-目标检测“垫脚石”
    SparkSQL 实验
    Spark Core实验
    MapReduce实验
    NoSQL实验
  • 原文地址:https://www.cnblogs.com/sunjiachen/p/4791542.html
Copyright © 2011-2022 走看看