#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

/*---------------------------NSOperation--------------------------------------*/
    //创建线程队列(线程池)
    NSOperationQueue *queue = [[NSOperationQueue alloc] init];
   
    //关闭暂停队列
    [queue setSuspended:YES];
   
    //设置最大并发数
    queue.maxConcurrentOperationCount = 1;
   
    //创建线程
    NSInvocationOperation *operation1 = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(thread1:) object:@"op1"];
    //设置线程的优先级
    operation1.queuePriority = NSOperationQueuePriorityNormal;
   
    NSInvocationOperation *operation2 = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(thread2:) object:@"op2"];
    //设置优先级
    operation2.queuePriority = NSOperationQueuePriorityHigh;
   
    //将线程添加到队列中
    [queue addOperation:operation1];
    [queue addOperation:operation2];
   
    //方式二:block
    [queue addOperationWithBlock:^{
       
        @autoreleasepool {
            for (int i=0; i<50; i++) {
                NSLog(@"op3:%d",i);
            }
        }
       
    }];
   

   
    //开始队列 —在并发数为1的时候能让后加入队列的最先打印出来
    [queue setSuspended:NO];
   
}

- (void)thread1:(NSString *)threadName {

@autoreleasepool {
        for (int i=0; i<50; i++) {
            NSLog(@"thread1:%d",i);
        }
       
    }
   
}

- (void)thread2:(NSString *)threadName {
   
    @autoreleasepool {
       
        for (int i=0; i<50; i++) {
            NSLog(@"thread2:%d",i);
        }
       
        [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(timeAction) userInfo:nil repeats:YES];
       
       
//        [[NSRunLoop currentRunLoop] run];
       
    }
   
}

- (void)timeAction {

NSLog(@"timeAction");
   
}

@end

多线程NSInvocationOperation(NSOperationQueue)的基本用法的更多相关文章

  1. iOS 开发多线程篇—GCD的常见用法

    iOS开发多线程篇—GCD的常见用法 一.延迟执行 1.介绍 iOS常见的延时执行有2种方式 (1)调用NSObject的方法 [self performSelector:@selector(run) ...

  2. iOS开发多线程篇—GCD的常见用法

    iOS开发多线程篇—GCD的常见用法 一.延迟执行 1.介绍 iOS常见的延时执行有2种方式 (1)调用NSObject的方法 [self performSelector:@selector(run) ...

  3. c/c++ 多线程 等待一次性事件 packaged_task用法

    多线程 等待一次性事件 packaged_task用法 背景:不是很明白,不知道为了解决什么业务场景,感觉std::asynck可以优雅的搞定一切,一次等待性事件,为什么还有个packaged_tas ...

  4. c#多线程中Lock()关键字的用法小结

    本篇文章主要是对c#多线程中Lock()关键字的用法进行了详细的总结介绍,需要的朋友可以过来参考下,希望对大家有所帮助     本文介绍C# lock关键字,C#提供了一个关键字lock,它可以把一段 ...

  5. Android多线程全面解析:IntentService用法&源码

    前言 多线程的应用在Android开发中是非常常见的,常用方法主要有: 继承Thread类 实现Runnable接口 AsyncTask Handler HandlerThread IntentSer ...

  6. java多线程详解(5)-Threadlocal用法

    ThreadLocal是什么 早在JDK 1.2的版本中就提供java.lang.ThreadLocal,ThreadLocal为解决多线程程序的并发问题提供了一种新的思路. 使用这个工具类可以很简洁 ...

  7. java多线程中synchronized关键字的用法

    转自:http://www.cdtarena.com/javapx/201308/9596.html 由于同一进程内的多个线程共享内存空间,在Java中,就是共享实例,当多个线程试图同时修改某个实例的 ...

  8. 多线程的并发问题,lock用法

    开启多个线程,每个线程中多次操作公共变量 using System; using System.Collections.Generic; using System.Linq; using System ...

  9. IOS开发 多线程编程 - NSOperationQueue

    一.简介 一个NSOperation对象可以通过调用start方法来执行任务,默认是同步执行的.也可以将NSOperation添加到一个NSOperationQueue(操作队列)中去执行,而且是异步 ...

随机推荐

  1. 图片缩放应用(nearest / bilinear / three-order interpolate)

    typedef xPixel PIXELCOLORRGB; double Sinxx(double value){ if (value < 0) value = -value; if (valu ...

  2. Coursera Machine Learning : Regression 简单回归

    简单回归 这里以房价预测作为例子来说明:这里有一批关于房屋销售记录的历史数据,知道房价和房子的大小.接下来就根据房子的大小来预测下房价. 简单线性回归,如下图所示,找到一条线,大体描述了历史数据的走势 ...

  3. XUtils——GET请求

    //HttpUtils实例化对象     HttpUtils http = new HttpUtils();       /*                *发送请求send(HttpMethod ...

  4. 黑科技项目:英雄无敌III Mod <<Fallen Angel>>介绍

    英雄无敌三简介(Heroes of Might and Magic III) 英3是1999年由New World Computing在Windows平台上开发的回合制策略魔幻游戏,其出版商是3DO. ...

  5. 用Action的属性接受参数

    版本, @Override是Java5的元数据,自动加上去的一个标志,告诉你说下面这个方法是从父类/接口 继承过来的,需要你重写一次,这样就可以方便你阅读,也不怕会忘记@Override是伪代码,表示 ...

  6. android Handler机制详解

      简单运行图:    名词解析: Message(消息):定义了一个包含描述以及随意的数据对象可以被发送到Hanlder的消息,获得消息的最好方法是Message.obtain或者Handler.o ...

  7. SQL Server 集合处理

    UNION ALL 返回两个结果集中所有的行,返回结果集中会存在重复行 UNION 返回两个结果集中去重的行,返回结果集中无重复行 INTERSECT 返回两个结果集都有的行,返回结果集中无重复行 E ...

  8. 第四章 使用Docker镜像和仓库

    第4章 使用Docker镜像和仓库 回顾: 回顾如何使用 docker run 创建最基本的容器 $sudo docker run -i -t --name another_container_mum ...

  9. codesmith生成java类

    今天生成的时候的时候找不到类型转换的文件JavaAlias 后台发现我装完codesmith后,没有把类型转换类放入对应的文件 把System-JavaTableNameComments.csmap和 ...

  10. 记一次FTP上传文件总是超时的解决过程

    好久没写博,还是重拾记录一下吧. 背景:买了一个阿里云的云虚拟机用来搭建网站(起初不了解云虚拟主机和云服务器的区别,以为都是有SSH功能的,后来发现不是这样样子啊,云虚拟机就是FTP上传网页+MySQ ...