串行队列 (依次执行)
dispatch_queue_t queue = dispatch_queue_create("serialDispatchQueue", NULL);
dispatch_async(queue, ^{
NSLog(@"queue1");
});
dispatch_async(queue, ^{
NSLog(@"queue2");
});
dispatch_async(queue, ^{
NSLog(@"queue3");
});
主线程执行
dispatch_async(dispatch_get_main_queue(), ^{
NSLog(@"主线程");
});
并行队列
dispatch_queue_t queue = dispatch_queue_create("currentDispatchQueue", DISPATCH_QUEUE_CONCURRENT);
dispatch_async(queue, ^{
NSLog(@"queue1");
});
dispatch_async(queue, ^{
NSLog(@"queue2");
});
dispatch_async(queue, ^{
NSLog(@"queue3");
});
dispatch_async(queue, ^{
NSLog(@"queue4");
});
在同步线程完成之后执行某操作(比如刷新UI)
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_group_t group = dispatch_group_create();
dispatch_group_async(group, queue, ^{
NSLog(@"queue1");
});
dispatch_group_async(group, queue, ^{
NSLog(@"queue2");
});
dispatch_group_async(group, queue, ^{
NSLog(@"queue3");
});
dispatch_group_notify(group, dispatch_get_main_queue(), ^{
NSLog(@"全部队列完成");
});
到某一步不能同步执行,必须要执行完之后才能再次同步
dispatch_queue_t queue = dispatch_queue_create("myCurrentQueue", DISPATCH_QUEUE_CONCURRENT);
dispatch_async(queue, ^{
NSLog(@"读取操作1");
});
dispatch_async(queue, ^{
NSLog(@"读取操作2");
});
dispatch_async(queue, ^{
NSLog(@"读取操作3");
});
dispatch_barrier_async(queue, ^{
NSLog(@"执行写入操作");
});
dispatch_async(queue, ^{
NSLog(@"读取操作4");
});
dispatch_async(queue, ^{
NSLog(@"读取操作5");
});
dispatch_async(queue, ^{
NSLog(@"读取操作6");
});
网友评论