多线程GCD的详细讲解 任务和队列(串行队列,并发队列) (一)

来源:互联网 发布:淘宝大学一飞老师 编辑:程序博客网 时间:2024/05/01 12:28

1.什么是GCD



2.任务和队列


执行任务的方式



队列:串行队列,并行队列,全局队列,主队列



//串行队列同步执行任务 会在当前线程内执行  # 不一定是主线程

//异步的方式执行串行队列 会创建一个新的线程来执行任务

//串行的队列都是按照顺序来执行。就是任务1 -> 任务2 -》任务3

//串行队列 同步执行任务 会在当前线程内执行  //所以打印的会是当前线程的编号 不一定是主线程-(void)demo{    //创建串行队列 DISPATCH_QUEUE_SERIAL    //   并行队列 DISPATCH_QUEUE_CONCURRENT    dispatch_queue_t queue=dispatch_queue_create("itcast", DISPATCH_QUEUE_SERIAL);        //创建任务    dispatch_block_t task1=^{        NSLog(@"%@  同步执行了方法1",[NSThread currentThread]);    };        dispatch_block_t task2=^{        NSLog(@"%@  同步执行了方法2",[NSThread currentThread]);    };            //加入队列        //同步的方式 执行队列    dispatch_sync(queue, task1);        dispatch_sync(queue, task2);        }//异步的方式 执行串行队列 会创建一个新的线程来执行任务-(void)demo2{    //创建串行队列 DISPATCH_QUEUE_SERIAL    //   并行队列 DISPATCH_QUEUE_CONCURRENT    dispatch_queue_t queue=dispatch_queue_create("itcast", DISPATCH_QUEUE_SERIAL);        //创建任务    dispatch_block_t task1=^{        NSLog(@"%@  异步执行了方法1",[NSThread currentThread]);    };        dispatch_block_t task2=^{        NSLog(@"%@  异步执行了方法2",[NSThread currentThread]);    };            //加入队列        //异步的方式 执行队列        //会顺序执行    dispatch_async(queue, task1);        dispatch_async(queue, task2);        }

并行队列


//并行队列,同步的方式执行 并不会开辟新线程

//异步的方式执行并行队列 会创建多个新的线程来执行多个任务 是随机无序执行的


//并行队列,同步的方式执行  并不会开辟新线程-(void)demo{    //创建串行队列 DISPATCH_QUEUE_SERIAL    //   并行队列 DISPATCH_QUEUE_CONCURRENT    dispatch_queue_t queue=dispatch_queue_create("itcast", DISPATCH_QUEUE_CONCURRENT);        //创建任务    dispatch_block_t task1=^{        NSLog(@"%@  同步执行了方法1",[NSThread currentThread]);    };        dispatch_block_t task2=^{        NSLog(@"%@  同步执行了方法2",[NSThread currentThread]);    };            //加入队列        //同步的方式 执行队列    dispatch_sync(queue, task1);        dispatch_sync(queue, task2);        }//异步的方式 执行并行队列 会创建多个新的线程来执行 多个任务// 是随机无序执行的-(void)demo2{    //创建串行队列 DISPATCH_QUEUE_SERIAL    //   并行队列 DISPATCH_QUEUE_CONCURRENT    dispatch_queue_t queue=dispatch_queue_create("itcast", DISPATCH_QUEUE_CONCURRENT);        //创建任务    dispatch_block_t task1=^{        NSLog(@"%@  异步执行了方法1",[NSThread currentThread]);    };        dispatch_block_t task2=^{        NSLog(@"%@  异步执行了方法2",[NSThread currentThread]);    };            //加入队列        //异步的方式 执行队列        //会顺序执行    dispatch_async(queue, task1);        dispatch_async(queue, task2);        }








2 0
原创粉丝点击