美文网首页
GCD多线程 (以前的代码)

GCD多线程 (以前的代码)

作者: sll_ | 来源:发表于2017-09-15 15:11 被阅读4次

    //核心概念:

    //任务:block

    //队列:把任务放到队列里面,队列先进先出的原则,

    //串行队列:顺序,一个一个执行(必须一个任务执行完了,才能从队列里面取出下一个任务)

    //并发队列:同时,同时执行很多个任务(可以同时取出很多个任务,只要有线程去执行)

    //同步sync:不会开新线程

    //异步async:会开新线程,多线程的代名词

    //串行队列同步执行:不开线程,在原来线程里面一个一个顺序执行

    //串行队列异步执行:开一条线程,在这个新线程里面一个一个顺序执行

    //并发队列异步执行:开多个线程,并发执行(不一定是一个一个)执行

    //并发队列同步执行:不开线程,在原来线程里面一个一个顺序执行

    //阶段性总结:

    //1.开不开线程,由执行任务方法决定,同步不开线程,异步肯定开线程

    //2.开多少线程,由队列决定,串行最多开一个线程,并发可以开多个线程。具体开多少个,有GCD底层决定,程序猿不能控制

    -(void)touchesBegan:(NSSet*)touches withEvent:(UIEvent*)event {

    [selfgcdTest7];

    }

    #pragma GCDG演练

    -(void)gcdTest7{

    dispatch_group_tgroup=dispatch_group_create();

    dispatch_queue_tqueue=dispatch_get_global_queue(0,0);

    dispatch_group_async(group, queue,^{

    NSLog(@"bbb%@",[NSThreadcurrentThread]);

    });

    dispatch_group_async(group, queue,^{

    NSLog(@"cc%@",[NSThreadcurrentThread]);

    });

    dispatch_group_async(group, queue,^{

    NSLog(@"ddd%@",[NSThreadcurrentThread]);

    });

    dispatch_group_notify(group, queue,^{

    NSLog(@"gaodig%@",[NSThreadcurrentThread]);

    });

    //最常用的在主线程中更新UI

    dispatch_group_notify(group,dispatch_get_main_queue(),^{

    ;

    });

    }

    -(void)gcdTest4

    {

    //1.并行队列

    dispatch_queue_tqueue =dispatch_queue_create("cz",DISPATCH_QUEUE_CONCURRENT);

    // 2.同步执行任务

    for(inti =0; i <10; i++) {

    dispatch_sync(queue,^{

    NSLog(@"%@ %d", [NSThreadcurrentThread], i);

    });

    }

    }

    -(void)gcdTest3

    {

    //1.并行队列

    dispatch_queue_tqueue =dispatch_queue_create("cz",DISPATCH_QUEUE_CONCURRENT);

    NSLog(@"xx");

    // 2.异步执行任务

    for(inti =0; i <10; i++) {

    NSLog(@"aaa");

    dispatch_async(queue,^{

    NSLog(@"%@ %d", [NSThreadcurrentThread], i);

    });

    NSLog(@"bbb");

    }

    NSLog(@"结束");

    }

    -(void)gcdTest2

    {

    // 1.串行队列

    //下面两种写法是一样的

    //    dispatch_queue_t queue= dispatch_queue_create("itcast",DISPATCH_QUEUE_SERIAL);

    dispatch_queue_tqueue =dispatch_queue_create("itcast",NULL);

    // 2.异步执行

    for(inti =0; i <10; i++) {

    dispatch_async(queue,^{

    NSLog(@"%@ %d", [NSThreadcurrentThread], i);

    });

    }

    }

    -(void)gcdTest1

    {

    // 1.创建一个串行队列

    //参数:1.队列标签2.队列的属性

    dispatch_queue_tqueue =dispatch_queue_create("itcast",DISPATCH_QUEUE_SERIAL);

    NSLog(@"开始!!");

    // 2.同步执行任务

    //一般只要使用”同步“执行,串行队列对添加的同步任务,会立马执行

    dispatch_sync(queue,^{

    NSLog(@"%@",[NSThreadcurrentThread]);

    });

    NSLog(@"完成!!");

    }

    //主队列异步

    -(void)gcdTest6{

    dispatch_queue_tqueue=dispatch_get_main_queue();

    NSLog(@"xx");

    // 2.异步执行任务

    for(inti =0; i <10; i++) {

    NSLog(@"aaa");

    dispatch_async(queue,^{

    NSLog(@"%@ %d", [NSThreadcurrentThread], i);

    });

    NSLog(@"bbb");

    }

    NSLog(@"结束");

    }

    相关文章

      网友评论

          本文标题:GCD多线程 (以前的代码)

          本文链接:https://www.haomeiwen.com/subject/htnssxtx.html