通过GCD 方式:把所有的多线程放到一个 串型队列中来跑
大概有下面几步
1.创建一个串型队列 并且同时放到 全局队列中
NSString *identifier = @"com. identifier.serial" ;
_queue = dispatch_queue_create([identifier UTF8String], DISPATCH_QUEUE_SERIAL);
dispatch_queue_t dQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0);
//dQueue:目标队列 _queue:当前的队列是相对于dQueue
dispatch_set_target_queue(_queue, dQueue);
2.多线程同步
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
dispatch_sync(_queue, ^{
//同步执行 某个线程1
});
});
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
dispatch_sync(_queue, ^{
//同步执行 某个线程2
});
});
// 这样 线程1 和 线程2 是同步执行的
通过NSOperationQueue开发 (解决GCD 中没有 cancel 的方法)
1.初始化Queue队列
//设置最大的执行数是1
self.maxConcurrentOperationCount = 1;
//同步执行
NSBlockOperation *operation = [NSBlockOperation blockOperationWithBlock:block];
[self addOperations:@[operation] waitUntilFinished:YES];
//取消所有的操作 cancelAllOperations
网友评论