1.设置最大并发数

  什么是并发数

  同时执行的任务数
  比如,同时开3个线程执行3个任务,并发数就是3
 
  最大并发数的相关方法

  - (NSInteger)maxConcurrentOperationCount;

  - (void)setMaxConcurrentOperationCount:(NSInteger)cnt;

  默认是并发队列,如果最大并发数>1,并发

如果最大并发数==1,串行队列

系统的默认是最大并发数-1

 -(void)maxConcurrentOperationCount
{
//1.创建队列
NSOperationQueue *queue = [[NSOperationQueue alloc]init]; //maxConcurrentOperationCount
/*
默认是并发队列,如果最大并发数>1,并发
如果最大并发数==1,串行队列
系统的默认是最大并发数-1 */
queue.maxConcurrentOperationCount = ; //2.封装操作
NSBlockOperation *op1 = [NSBlockOperation blockOperationWithBlock:^{
NSLog(@"1---%@",[NSThread currentThread]);
}]; NSBlockOperation *op2 = [NSBlockOperation blockOperationWithBlock:^{
NSLog(@"2---%@",[NSThread currentThread]);
}]; NSBlockOperation *op3 = [NSBlockOperation blockOperationWithBlock:^{
NSLog(@"3---%@",[NSThread currentThread]);
}]; NSBlockOperation *op4 = [NSBlockOperation blockOperationWithBlock:^{
NSLog(@"4---%@",[NSThread currentThread]);
}]; NSBlockOperation *op5 = [NSBlockOperation blockOperationWithBlock:^{
NSLog(@"5---%@",[NSThread currentThread]);
}]; //3.把操作添加到队列
[queue addOperation:op1];
[queue addOperation:op2];
[queue addOperation:op3];
[queue addOperation:op4];
[queue addOperation:op5];
}

示例

2.队列的取消、暂停、恢复

  取消队列的所有操作(取消队列中的所有线程,是不可恢复的)

  - (void)cancelAllOperations;

  提示:也可以调用NSOperation的- (void)cancel方法取消单个操作

  暂停和恢复队列

  - (void)setSuspended:(BOOL)b; // YES代表暂停队列,NO代表恢复队列

  - (BOOL)isSuspended;

 -(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
// suspended
// self.queue.suspended = YES;
//当值为YES的适合暂停,为NO的时候是恢复
// if (self.queue.suspended) {
// NSLog(@"恢复执行");
// self.queue.suspended = NO;
// }else
// {
// NSLog(@"暂停");
// self.queue.suspended = YES;
// } //取消,不再执行
[self.queue cancelAllOperations]; }

示例

3.补充:如何中断线程中的操作

  队列的取消、暂停、恢复,是不能中断正在执行的操作的,只对出去等待调度队列中的线程有效.想要中断正在执行的线程,可以用以下方法:

  用self.isCancelled判断外界是否执行了中断操作,然后在调用return方法.

@implementation YSOperation
-(void)main
{
//耗时操作
for (NSInteger i =; i<; i++) {
// if (self.isCancelled) {
// return;
// }
NSLog(@"1-%zd---%@",i,[NSThread currentThread]);
} if (self.isCancelled) {
return;
}
for (NSInteger i =; i<; i++) {
NSLog(@"2-%zd---%@",i,[NSThread currentThread]);
} if (self.isCancelled) {
return;
} for (NSInteger i =; i<; i++) {
NSLog(@"3-%zd---%@",i,[NSThread currentThread]);
}
}
@end

示例--在继承自NSOperation的类中中断线程

NSOperationQueue的其他方法的更多相关文章

  1. 多线程编程4 - NSOperationQueue

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

  2. NSOperationQueue

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

  3. 2016 - 1- 19 NSOperationQueue的简单使用

    一:NSOperationQueue的作用: 1.NSOperation可以调用start方法来执行任务,但默认是同步执行. 2.如果将NSOperation加入到NSOperationQueue中, ...

  4. 多线程编程3 - NSOperationQueue

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

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

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

  6. iOS 并发编程之 Operation Queues

    现如今移动设备也早已经进入了多核心 CPU 时代,并且随着时间的推移,CPU 的核心数只会增加不会减少.而作为软件开发者,我们需要做的就是尽可能地提高应用的并发性,来充分利用这些多核心 CPU 的性能 ...

  7. iOS 并发编程指南

    iOS Concurrency Programming Guide iOS 和 Mac OS 传统的并发编程模型是线程,不过线程模型伸缩性不强,而且编写正确的线程代码也不容易.Mac OS 和 iOS ...

  8. iOS - NSURLSession 网络请求

    前言 NS_CLASS_AVAILABLE(NSURLSESSION_AVAILABLE, 7_0) @interface NSURLSession : NSObject @available(iOS ...

  9. iOS 并发:NSOperation 与调度队列入门(1)

    一直以来,并发都被视为 iOS 开发中的「洪水猛兽」.许多开发者都将其视为危险地带,唯恐避之而不及.更有谣传认为,多线程代码应该尽力避免.笔者同意,如果你对并发的了解不够深入,就容易造成危险.但是,危 ...

随机推荐

  1. 使用tomcat部署jsp程序

    安装java1.6.0到默认目录 下载apache-tomcat-6.0.32-windows-x86.zip,解压到D:\soft目录下 配置环境变量 JAVA_HOME C:\Program Fi ...

  2. js判断是手机还是电脑访问网站

    js判断是手机还是电脑访问网站                               <script type="text/javascript"> <!- ...

  3. 20169212《Linux内核原理与分析》第七周作业

    实验 给MenuOS增加time和time-asm命令的方法: 更新menu代码到最新版 再main()函数中增加MenuConfig 增加对应的Time函数和TimeAsm函数(这里的函数要换成我们 ...

  4. java 复制字串算法

    public class Copy { public static void copy(char[] s, char[] t){ int i=0; for(i=0; i<s.length; i+ ...

  5. CentOS_7.2安装MySQL_5.7

    一.安装依赖包和开发工具: yum install vim vim-enhanced wget zip unzip telnet ntsysv compat* apr* nasm* gcc gcc* ...

  6. python中引用

    python中的可变类型与不可变类型: 在讲python深浅拷贝之前,我们首先应该明白python中元素的类型:主要分为可变类型和不可变类型. 可变类型,就是值可以改变的类型有两个: 列表:list ...

  7. PL/SQL设置快捷键

    PL/SQL常用的快捷方式: sf= select * from sr=select t.*,t.rowid from t sd = select distinct * from d=delete f ...

  8. 项目导入myeclipse10后jsp报错问题

    电脑重装系统装了个myeclipse10,当项目导入时发现jsp报错,原本以为是jdk版本问题,在网上找了资料才知道原来是myeclipse10相对之前版本对js的检查更加严格了.可以用以下方法解决: ...

  9. [字符哈希] POJ 3094 Quicksum

    Quicksum Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 16488   Accepted: 11453 Descri ...

  10. tomcat mysql 内存溢出的问题

    原因是mysql的密码有问题 解决办法: 具体操作步骤: 关闭 mysql: # service mysqld stop 然后: # mysqld_safe --skip-grant-tables 启 ...