验证在设定最大线程队列组为1的情况下,队列组内是否可以追加任务?
验证在设定最大线程队列组为1的情况下,队列组内的任务线程数量多少的概念?
验证添加到队列自代码的位置,于并发执行任务代码的位置关系,是否会影响并发任务的先后顺序?
验证不同方式添加并发任务是否会存在潜在优先级的概念?
代码例子:
- (void)method {
NSLog(@"%s",__func__);
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
NSBlockOperation *op1 = [NSBlockOperation blockOperationWithBlock:^{
NSLog(@"1--%@",[NSThread currentThread]);
}];
NSBlockOperation *op2 = [NSBlockOperation blockOperationWithBlock:^{
NSLog(@"2--%@",[NSThread currentThread]);
}];
NSBlockOperation *op3 = [NSBlockOperation blockOperationWithBlock:^{
NSLog(@"3--%@",[NSThread currentThread]);
}];
queue.maxConcurrentOperationCount = 1;
[queue addOperation:op1];
[queue addOperation:op2];
[queue addOperation:op3];
[op1 addExecutionBlock:^{
NSLog(@"5--%@",[NSThread currentThread]);
}];
[op3 addExecutionBlock:^{
NSLog(@"6--%@",[NSThread currentThread]);
}];
[queue addOperationWithBlock:^{
NSLog(@"4--queue%@",[NSThread currentThread]);
}];
}
2016-07-11 13:45:47.515 06-[11380:9735981] -[ViewController method]
2016-07-11 13:45:47.516 06-[11380:9738435] 1--<NSThread: 0x7fc1aa40d250>{number = 14, name = (null)}
2016-07-11 13:45:47.516 06-[11380:9738430] 5--<NSThread: 0x7fc1ac90b4a0>{number = 13, name = (null)}
2016-07-11 13:45:47.516 06-[11380:9738430] 2--<NSThread: 0x7fc1ac90b4a0>{number = 13, name = (null)}
2016-07-11 13:45:47.516 06-[11380:9738430] 6--<NSThread: 0x7fc1ac90b4a0>{number = 13, name = (null)}
2016-07-11 13:45:47.516 06-[11380:9738435] 3--<NSThread: 0x7fc1aa40d250>{number = 14, name = (null)}
2016-07-11 13:45:47.517 06-[11380:9738430] 4--queue<NSThread: 0x7fc1ac90b4a0>{number = 13, name = (null)}
2016-07-11 13:51:48.988 06-掌握-操作队列的基本使用[11380:9735981] -[ViewController method]
2016-07-11 13:51:48.989 06-掌握-操作队列的基本使用[11380:9743279] 1--<NSThread: 0x7fc1aa52ba90>{number = 15, name = (null)}
2016-07-11 13:51:48.989 06-掌握-操作队列的基本使用[11380:9743281] 5--<NSThread: 0x7fc1aa62d050>{number = 16, name = (null)}
2016-07-11 13:51:48.989 06-掌握-操作队列的基本使用[11380:9743281] 2--<NSThread: 0x7fc1aa62d050>{number = 16, name = (null)}
2016-07-11 13:51:48.989 06-掌握-操作队列的基本使用[11380:9743279] 3--<NSThread: 0x7fc1aa52ba90>{number = 15, name = (null)}
2016-07-11 13:51:48.989 06-掌握-操作队列的基本使用[11380:9743281] 6--<NSThread: 0x7fc1aa62d050>{number = 16, name = (null)}
2016-07-11 13:51:48.990 06-掌握-操作队列的基本使用[11380:9743281] 4--queue<NSThread: 0x7fc1aa62d050>{number = 16, name = (null)}
2016-07-11 13:59:01.151 06-[11380:9735981] -[ViewController method]
2016-07-11 13:59:01.151 06-[11380:9749519] 5--<NSThread: 0x7fc1acb031a0>{number = 20, name = (null)}
2016-07-11 13:59:01.151 06-[11380:9749437] 1--<NSThread: 0x7fc1aa627da0>{number = 19, name = (null)}
2016-07-11 13:59:01.152 06-[11380:9749521] 2--<NSThread: 0x7fc1ac805760>{number = 21, name = (null)}
2016-07-11 13:59:01.152 06-[11380:9749437] 3--<NSThread: 0x7fc1aa627da0>{number = 19, name = (null)}
2016-07-11 13:59:01.152 06-[11380:9749521] 6--<NSThread: 0x7fc1ac805760>{number = 21, name = (null)}
2016-07-11 13:59:01.152 06-[11380:9749521] 4--queue<NSThread: 0x7fc1ac805760>{number = 21, name = (null)}
2016-07-11 14:00:49.170 06-[11380:9751641] 1--<NSThread: 0x7fc1ac802f20>{number = 26, name = (null)}
2016-07-11 14:00:49.170 06-[11380:9751757] 5--<NSThread: 0x7fc1aa417c70>{number = 28, name = (null)}
2016-07-11 14:00:49.170 06-[11380:9751757] 2--<NSThread: 0x7fc1aa417c70>{number = 28, name = (null)}
2016-07-11 14:00:49.171 06-[11380:9751757] 6--<NSThread: 0x7fc1aa417c70>{number = 28, name = (null)}
2016-07-11 14:00:49.171 06-[11380:9751641] 3--<NSThread: 0x7fc1ac802f20>{number = 26, name = (null)}
2016-07-11 14:00:49.171 06-[11380:9751757] 4--queue<NSThread: 0x7fc1aa417c70>{number = 28, name = (null)}
2016-07-11 14:01:46.693 06-[11380:9735981] -[ViewController method]
2016-07-11 14:01:46.694 06-[11380:9752865] 5--<NSThread: 0x7fc1aa52db20>{number = 32, name = (null)}
2016-07-11 14:01:46.694 06-[11380:9752861] 1--<NSThread: 0x7fc1acb04270>{number = 31, name = (null)}
2016-07-11 14:01:46.694 06-[11380:9752865] 2--<NSThread: 0x7fc1aa52db20>{number = 32, name = (null)}
2016-07-11 14:01:46.694 06-[11380:9752861] 3--<NSThread: 0x7fc1acb04270>{number = 31, name = (null)}
2016-07-11 14:01:46.694 06-[11380:9752865] 6--<NSThread: 0x7fc1aa52db20>{number = 32, name = (null)}
2016-07-11 14:01:46.694 06-[11380:9752865] 4--queue<NSThread: 0x7fc1aa52db20>{number = 32, name = (null)}
使用新的顺序:
- (void)method {
NSLog(@"%s",__func__);
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
NSBlockOperation *op1 = [NSBlockOperation blockOperationWithBlock:^{
NSLog(@"1--%@",[NSThread currentThread]);
}];
NSBlockOperation *op2 = [NSBlockOperation blockOperationWithBlock:^{
NSLog(@"2--%@",[NSThread currentThread]);
}];
NSBlockOperation *op3 = [NSBlockOperation blockOperationWithBlock:^{
NSLog(@"3--%@",[NSThread currentThread]);
}];
queue.maxConcurrentOperationCount = 1;
[op1 addExecutionBlock:^{
NSLog(@"5--%@",[NSThread currentThread]);
}];
[op3 addExecutionBlock:^{
NSLog(@"6--%@",[NSThread currentThread]);
}];
[queue addOperationWithBlock:^{
NSLog(@"4--queue%@",[NSThread currentThread]);
}];
[queue addOperation:op1];
[queue addOperation:op2];
[queue addOperation:op3];
}
把添加到队列组的方法放在最后,执行多次后发现:
2016-07-11 14:10:20.656 06-[11734:9759706] -[ViewController method]
2016-07-11 14:10:20.657 06-[11734:9759772] 4--queue<NSThread: 0x7fc39aa00100>{number = 3, name = (null)}
2016-07-11 14:10:20.658 06-[11734:9759765] 1--<NSThread: 0x7fc399752000>{number = 2, name = (null)}
2016-07-11 14:10:20.658 06-[11734:9759772] 5--<NSThread: 0x7fc39aa00100>{number = 3, name = (null)}
2016-07-11 14:10:20.658 06-[11734:9759772] 2--<NSThread: 0x7fc39aa00100>{number = 3, name = (null)}
2016-07-11 14:10:20.658 06-[11734:9759765] 3--<NSThread: 0x7fc399752000>{number = 2, name = (null)}
2016-07-11 14:10:20.658 06-[11734:9759772] 6--<NSThread: 0x7fc39aa00100>{number = 3, name = (null)}
2016-07-11 14:12:40.987 06-[11734:9759706] -[ViewController method]
2016-07-11 14:12:40.987 06-[11734:9763018] 4--queue<NSThread: 0x7fc39a902c30>{number = 4, name = (null)}
2016-07-11 14:12:40.987 06-[11734:9763018] 5--<NSThread: 0x7fc39a902c30>{number = 4, name = (null)}
2016-07-11 14:12:40.987 06-[11734:9763012] 1--<NSThread: 0x7fc39a902090>{number = 5, name = (null)}
2016-07-11 14:12:40.988 06-[11734:9763018] 2--<NSThread: 0x7fc39a902c30>{number = 4, name = (null)}
2016-07-11 14:12:40.988 06-[11734:9763012] 3--<NSThread: 0x7fc39a902090>{number = 5, name = (null)}
2016-07-11 14:12:40.988 06-[11734:9763018] 6--<NSThread: 0x7fc39a902c30>{number = 4, name = (null)}
2016-07-11 14:13:21.239 06-[11734:9759706] -[ViewController method]
2016-07-11 14:13:21.240 06-[11734:9763934] 4--queue<NSThread: 0x7fc39a903650>{number = 6, name = (null)}
2016-07-11 14:13:21.240 06-[11734:9763934] 5--<NSThread: 0x7fc39a903650>{number = 6, name = (null)}
2016-07-11 14:13:21.240 06-[11734:9763927] 1--<NSThread: 0x7fc39975e050>{number = 7, name = (null)}
2016-07-11 14:13:21.240 06-[11734:9763934] 2--<NSThread: 0x7fc39a903650>{number = 6, name = (null)}
2016-07-11 14:13:21.241 06-[11734:9763927] 6--<NSThread: 0x7fc39975e050>{number = 7, name = (null)}
2016-07-11 14:13:21.241 06-[11734:9763934] 3--<NSThread: 0x7fc39a903650>{number = 6, name = (null)}