多线程的方法

多线程分为GCD,NSOperation和NSThread。GCD底层是用C语言实现的,NSOperation是对GCD轻量级的封装。NSThread是比较原始的方法了。

1、GCD创建多线程

首先,我们需要创建一个队列,队列根据不同的需要创建为串行队列和并行队列

dispatch_queue_t  q = dispatch_queue_create("xiancheng",DISPATCH_QUEUE_CONCURRENT)

函数中第一个参数是当前队列的名称,第二个参数是创建队列的类型:DISPATCH_QUEUE_CONCURRENT为并行队列,DISPATCH_QUEUE_SERIAL为串行队列。

另外,队列还有主队列和全局队列。

主队列:dispatch_queue_t  queue =  dispatch_get_main_queue();获取主线程队列,在主线程更新UI。

全局队列:dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0)

接下来我们可以使用dispatch_async或dispatch_sync函数来加载需要运行的任务。

同步线程:

dispatch_sync(queue,^{

block的具体代码(即需要执行的任务)

});

同步执行任务代码,不会返回函数,知道block中的代码执行完毕。嵌套使用时容易引起死锁。

异步线程:

dispatch_async(queue,^{

block中的任务代码

});

异步执行block,函数立即返回。

NSOperation:

同样的,NSOperation需要一个队列

在.m文件中,输入以下内容:

#import “ViewController.h”

@interface ViewController()

@property(noatomic,strong) NSOperationQueue *myQueue;

@end

@implementation ViewController

-(void)viewDidLoad{

[super viewDidLoad];

初始化队列

self.myQueue = [[NSOperationQueue alloc] init];

}

创建一个线程

[self.myQueue addOperationWithBlock:^{


Block中的任务代码

}]

在主线程中执行任务

[NSOperationQueue mainQueue] addOperationWithBlock:^{

block中的任务代码

}];

多个线程时,设置线程的执行顺序

NSBlockOperation *op1 = [NSBlockOperation blockOperationWithBlock:^{

任务代码

}];

NSBlockOperation *op2 = [NSBlockOperation blockOperationWithBlock:^{

任务代码

}];

NSBlockOperation *op3 = [NSBlockOperation blockOperationWithBlock:^{

任务代码

}];

假设我们需要线程的执行顺序为:op1,op2,op3.

思想就是线程2依赖于线程1,等线程1执行完毕后执行线程2.

[op2 addDependency:op1];

[op3 addDependency:op2];

将线程依次添加到队列中

[self.myQueue addOperation:op1]

[self.myQueue addOperation:op2]

[self.myQueue addOperation:op3]

@end

你可能感兴趣的:(多线程的方法)