NSOperationQueue是把GCD封装为OC语法,额外比GCD增加了几项新功能
第一、支持限制最大并发数
- (void)operationQueueMaxConcurrentOperationCount
{
//1:创建队列
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
/*
系统默认的并发数是-1,所有任务全部并发执行
*/
queue.maxConcurrentOperationCount = 3;//(产生4条线程)
//2:封装操作
NSBlockOperation *op1 = [NSBlockOperation blockOperationWithBlock:^{
[NSThread sleepForTimeInterval:1.0];
NSLog(@"1------%@",[NSThread currentThread]);
}];
NSBlockOperation *op2 = [NSBlockOperation blockOperationWithBlock:^{
[NSThread sleepForTimeInterval:1.0];
NSLog(@"2------%@",[NSThread currentThread]);
}];
NSBlockOperation *op3 = [NSBlockOperation blockOperationWithBlock:^{
[NSThread sleepForTimeInterval:1.0];
NSLog(@"3------%@",[NSThread currentThread]);
}];
NSBlockOperation *op4 = [NSBlockOperation blockOperationWithBlock:^{
[NSThread sleepForTimeInterval:1.0];
NSLog(@"4------%@",[NSThread currentThread]);
}];
NSBlockOperation *op5 = [NSBlockOperation blockOperationWithBlock:^{
[NSThread sleepForTimeInterval:1.0];
NSLog(@"5------%@",[NSThread currentThread]);
}];
NSBlockOperation *op6 = [NSBlockOperation blockOperationWithBlock:^{
[NSThread sleepForTimeInterval:1.0];
NSLog(@"6------%@",[NSThread currentThread]);
}];
//3:把操作添加到队列
[queueaddOperation:op1];
[queueaddOperation:op2];
[queueaddOperation:op3];
[queueaddOperation:op4];
[queueaddOperation:op5];
[queueaddOperation:op6];
self.queue= queue;
}
2019-04-02 18:47:01.049897+0800 test666666[28710:3433110] 1------<NSThread: 0x6000022df780>{number = 5, name = (null)}
2019-04-02 18:47:01.049897+0800 test666666[28710:3433127] 3------<NSThread: 0x6000022df6c0>{number = 4, name = (null)}
2019-04-02 18:47:01.049921+0800 test666666[28710:3433109] 2------<NSThread: 0x6000022da6c0>{number = 3, name = (null)}
2019-04-02 18:47:02.053339+0800 test666666[28710:3433109] 6------<NSThread: 0x6000022da6c0>{number = 3, name = (null)}
2019-04-02 18:47:02.053461+0800 test666666[28710:3433125] 4------<NSThread: 0x6000022df7c0>{number = 6, name = (null)}
2019-04-02 18:47:02.053590+0800 test666666[28710:3433127] 5------<NSThread: 0x6000022df6c0>{number = 4, name = (null)}
第二、支持暂停、取消
self.queue.suspended
[self.queue cancelAllOperations]
第三、支持KVO 监控线程状态
网友评论