- 需求:
有两个任务都要放在子线程中执行, 且要保证A执行完再执行B.
如果你也有同样的需求, 可以从下面几种方法中挑选一种
- 实现方法
1.1. 方法一 使用GCD串行队列. 先创建一个串行队列, 将任务加入到串行队列中, 因为是串行队列,能保证顺序执行, 且因为是串行队列,所以两个任务是在同一线程执行.
dispatch_queue_t queue = dispatch_queue_create("myCostom", DISPATCH_QUEUE_SERIAL);
NSLog(@"dispatch111 start");
dispatch_async(queue, ^{
NSLog(@"sleep1111");
NSLog(@"dispatch111 %@", [NSThread currentThread]);
[NSThread sleepForTimeInterval:5];
NSLog(@"awake up111");
});
NSLog(@"dispatch2222 start");
dispatch_async(queue, ^{
NSLog(@"sleep 2222");
NSLog(@"dispatch2222 %@", [NSThread currentThread]);
[NSThread sleepForTimeInterval:5];
NSLog(@"awake up222222");
});
NSLog(@"dispatch 33333");
1.2 方法二 使用barrier.
dispatch_queue_t queue = dispatch_queue_create("mycustom", DISPATCH_QUEUE_CONCURRENT);
NSLog(@"dispatch111 start");
dispatch_async(queue, ^{
NSLog(@"sleep1111");
NSLog(@"dispatch111 %@", [NSThread currentThread]);
[NSThread sleepForTimeInterval:5];
NSLog(@"awake up111");
});
dispatch_barrier_async(queue, ^{
NSLog