多线程-GCD2

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.

//第三种实现多线程的方式 NSOperation 和 NSOperationQueue 的组合
//死锁问题:本质就是内存分配不合理;了解银行家算法
//注意:
//1、NSOperation 和 NSOperationQueue 本身并不是多线程
//2、NSOperation:任务块。NSOperationQueue :任务队列
//3、实现多线程的方式是:把若干个任务快添加到任务队列,这个时候操作系统会自己创建适合数量的THread(线程)来完成队列里面的任务
//4、队列里面的任务块会按照队列的顺序一一开始,但是每个任务块结束的时间并不一定(可能最后开始的任务最先完成)
//5、NSOperation 是一个抽象的类,一般使用他得子类,iOS里面自带的两个他得子类,一种是target思想,另一种是block思想的
//6、操作系统创建线程的数量取决于:1,队列里面任务的数量, 2,CPU的使用情况, 3,内存的使用情况 4,其他的资源

//一、NSOperation第一个子类
/*
NSInvocationOperation *opel1 = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(opel1Action) object:nil];
NSInvocationOperation *opel2 = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(opel2Action) object:nil];
NSInvocationOperation *opel3 = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(opel3Action) object:nil];
NSInvocationOperation *opel4 = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(opel4Action) object:nil];
NSInvocationOperation *opel5 = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(opel5Action) object:nil];
//创建任务队列
//第一种创建任务队列的方式

NSOperationQueue *queue = [[NSOperationQueue alloc]init];
设置任务块的最大并发数(串行队列)子线程
queue.maxConcurrentOperationCount = 1;

//第二种创建任务队列的方式
//这种方式特点:队列里面的主线程会在主线程 串行完成
//NSOperationQueue *queue = [NSOperationQueue mainQueue];
//把任务快添加到任务队列
[queue addOperation:opel1];
[queue addOperation:opel2];
[queue addOperation:opel3];
[queue addOperation:opel4];
[queue addOperation:opel5];

*/


//2、NSOperation第二个子类
NSBlockOperation *blockOp1 = [NSBlockOperation blockOperationWithBlock:^{
//block体里面写具体的完成任务
NSLog(@"任务一%@,%d", [NSThread currentThread], [NSThread isMainThread]);

}];
NSBlockOperation *blockOp2 = [NSBlockOperation blockOperationWithBlock:^{
NSLog(@"任务二%@,%d", [NSThread currentThread], [NSThread isMainThread]);
}];
NSBlockOperation *blockOp3 = [NSBlockOperation blockOperationWithBlock:^{
NSLog(@"任务三%@,%d", [NSThread currentThread], [NSThread isMainThread]);
}];
NSBlockOperation *blockOp4 = [NSBlockOperation blockOperationWithBlock:^{
NSLog(@"任务四%@,%d", [NSThread currentThread], [NSThread isMainThread]);
}];
NSBlockOperation *blockOp5 = [NSBlockOperation blockOperationWithBlock:^{
NSLog(@"任务五%@,%d", [NSThread currentThread], [NSThread isMainThread]);
}];
NSBlockOperation *blockOP6 = [NSBlockOperation blockOperationWithBlock:^{
NSLog(@"任务六%@,%d", [NSThread currentThread], [NSThread isMainThread]);
}];

//任务队列
NSOperationQueue *queue = [[NSOperationQueue alloc]init];
[queue addOperation:blockOp1];
[queue addOperation:blockOp2];
[queue addOperation:blockOp3];
[queue addOperation:blockOp4];
[queue addOperation:blockOp5];
[queue addOperation:blockOP6];

}

#pragma mark 做任务计算
- (void)opel1Action {
NSLog(@"任务一%@,%d", [NSThread currentThread], [NSThread isMainThread]);

}

- (void)opel2Action {
NSLog(@"任务二%@,%d", [NSThread currentThread], [NSThread isMainThread]);
}

- (void)opel3Action {
NSLog(@"任务三%@,%d", [NSThread currentThread], [NSThread isMainThread]);

}

- (void)opel4Action {
NSLog(@"任务四%@,%d", [NSThread currentThread], [NSThread isMainThread]);
}

- (void)opel5Action {
NSLog(@"任务五%@,%d", [NSThread currentThread], [NSThread isMainThread]);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值