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. Oracle 11g default profile 默认启用密码过期180天 ORA-28001错误处理

    问题描述:客户反映客户端不能登录应用程序时不能连接.环境:AIX 5.3 + Oracle 11gR2解决:远程Telnet到数据库主机,sqlplus / as sysdba 连接后操作正常,表明数 ...

  2. 实现远程FTP特定时间轨道号MODIS数据的搜索

    private ArrayList alst = new System.Collections.ArrayList();//建立ArrayList对象 int strLength = 0; strin ...

  3. Install Atom editor in ubuntu 14.04

    Step 1: Add repository sudo add-apt-repository ppa:webupd8team/atom Step 2: Update the repository su ...

  4. 安装Windows 7

    -EndFragment--> 1.安装win7_64位步骤: https://www.douban.com/note/224102684/ 安装Win7系统为硬盘分区的方法 笨小康2012-0 ...

  5. html 中自动换行的实现方式

    1,<div type="word-wrap: break-word;word-break:break-all;"> </div> 2, <div t ...

  6. node模块系统常用命令

    node模块系统常用命令 命令 示例 备注 安装模块 npm install commander 最新版本 npm install commander@1.0.0 指定版本 npm install c ...

  7. (转)在oracle中varchar和varchar2有什么区别?

    1.varchar2把所有字符都占两字节处理(一般情况下),varchar只对汉字和全角等字符占两字节,数字,英文字符等都是一个字节: 2.VARCHAR2把空串等同于null处理,而varchar仍 ...

  8. php 常用数组操作

    php常用的数组操作函数,包括数组的赋值.拆分.合并.计算.添加.删除.查询.判断.排序等 array_combine 功能:用一个数组的值作为新数组的键名,另一个数组的值作为新数组的值 <?p ...

  9. Html5-canvas

    Html5-canvas: 坐标是x向右,逐步增大, y坐标向下增大,原点在画布的左上角.长度单位是一个像素: 像素是一个密度单位,而厘米是长度单位,两者无法比较: Html5的绘图函数: 2.    ...

  10. ByteArrayBuilder

    public class ByteArrayBuilder : IDisposable { #region Constants /// <summary> /// True in a by ...