//第四种方式
//创建线程池
NSOperationQueue *operationQueue=[[NSOperationQueue alloc]init];
//Block 开启线程
[operationQueue addOperationWithBlock:^{
for (int i=0; i<100; i++) {
NSLog(@"--4多线程--%d",i);
}
}];
//第五种
NSOperationQueue *NewOperationQueue=[[NSOperationQueue alloc]init];//创建线程池
//设置线程的并发数
NewOperationQueue.maxConcurrentOperationCount=2;
//创建线程
NSInvocationOperation *operation1=[[NSInvocationOperation alloc]initWithTarget:self selector:@selector(OperationQueueMethod:) object:@"线程1"];
NSInvocationOperation *operation2=[[NSInvocationOperation alloc]initWithTarget:self selector:@selector(OperationQueueMethod:) object:@"线程2"];
//设置线程的优选级
operation2.queuePriority=NSOperationQueuePriorityHigh;
//将线程添加到线程池
[NewOperationQueue addOperation:operation1];
[NewOperationQueue addOperation:operation2];
// [NewOperationQueue addOperations:<#(NSArray *)#> waitUntilFinished:<#(BOOL)#>]//添加多个线程,数组形式
return YES;
}
-(void)OperationQueueMethod:(NSString *)Str//str是传递的参数
{
for (int i=0; i<100; i++) {
NSLog(@"%@-%d",Str,i);
}
}
//第五种
NSOperationQueue *NewOperationQueue=[[NSOperationQueue alloc]init];//创建线程池
//设置线程的并发数
NewOperationQueue.maxConcurrentOperationCount=2;
//创建线程
NSInvocationOperation *operation1=[[NSInvocationOperation alloc]initWithTarget:self selector:@selector(OperationQueueMethod1:) object:@"线程1"];
NSInvocationOperation *operation2=[[NSInvocationOperation alloc]initWithTarget:self selector:@selector(OperationQueueMethod2:) object:@"线程2"];
//设置线程的优选级
operation2.queuePriority=NSOperationQueuePriorityHigh;
//将线程添加到线程池
[NewOperationQueue addOperation:operation1];
[NewOperationQueue addOperation:operation2];
// [NewOperationQueue addOperations:<#(NSArray *)#> waitUntilFinished:<#(BOOL)#>]//添加多个线程,数组形式
return YES;
}
-(void)OperationQueueMethod1:(NSString *)Str//str是传递的参数
{
NSLog(@"线程1");
//跳到主线程执行
[self performSelectorOnMainThread:@selector(mainThread) withObject:@"主线程" waitUntilDone:YES];
}
-(void)mainThread
{
//判断当前是否是主线程
BOOL isMain=[NSThread isMainThread];
if (isMain) {
NSLog(@"该线程是主线程");
}
}
-(void)OperationQueueMethod2:(NSString *)Str//str是传递的参数
{
NSLog(@"线程2");
}