iOS 多线程的使用(GCD)

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {

    [super viewDidLoad];

    死锁  在主队列里面  在主线程执行同步任务

    同步执行  一个任务执行完毕之后  再去执行另外一个任务

    主队列(GCD)同步执行某个任务的时候  会等待前面的任务 执行完毕之后  再去执行主队列里面的任务

    主队列是在主线程里面同步执行任务的 它们在同一个线程里面 线程是顺序执行的这时候主线程会等主队列里面的任务执行完毕  再去执行主线程   主线程执行完毕才回去执行主队列里面的任务 从而出现死锁

    

    通过GCD获得主队列dispatch_get_main_queue

    所有接收队列对象  都用dispatch_queue_t

    dispatch_queue_t mainQueue = dispatch_get_main_queue();


    同步执行任务

    dispatch_sync(mainQueue, ^{

        NSLog(@"000000");

    });

    

    异步执行

    异步  允许开辟一个线程(利用系统空闲时间去执行  程序员  不能控制)

    同步不可以开辟线程 同步顺序执行)

    


        dispatch_async(mainQueue, ^{

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

       });


    

    

  dispatch_get_main_queue()属于串行队列

   dispatch_queue_create("", null)属于串行队列

   串行队列按照顺序去执行队列的任务

 /**

   dispatch_queue_t mainQueue = dispatch_get_main_queue();

    dispatch_async(mainQueue, ^{

         NSLog(@"11111");

    });

    dispatch_async(mainQueue, ^{

        NSLog(@"22222");

    });

    dispatch_async(mainQueue, ^{

        NSLog(@"3333333");

    });

    dispatch_async(mainQueue, ^{

        NSLog(@"44444444");

    });

  */

   /**

    自己创建队列的方式

  dispatch_queue_t huluwaqueue =   dispatch_queue_create("huluwa", DISPATCH_QUEUE_CONCURRENT);

    for (int i = 0; i < 5; i ++) {

        

              dispatch_async(huluwaqueue, ^{

//                     NSLog(@"11111");

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

               });

    }

    

    */

    /**

//#define DISPATCH_QUEUE_PRIORITY_HIGH 2 //

//#define DISPATCH_QUEUE_PRIORITY_DEFAULT 0 // 默认(中)

//#define DISPATCH_QUEUE_PRIORITY_LOW (-2) //

//#define DISPATCH_QUEUE_PRIORITY_BACKGROUND INT16_MIN // 后台

//    gcd 默认提供了全局的并发队列  供整个应用程序使用 不需要手动创建

    dispatch_queue_t quanjuQueue1 = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0);

    dispatch_queue_t quanjuQueue2 = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0);

    dispatch_queue_t quanjuQueue3 = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

    

    dispatch_async(quanjuQueue1, ^{

         NSLog(@"11111");

         NSLog(@"11%@",[NSThread currentThread]);

    });

    dispatch_async(quanjuQueue2, ^{

        NSLog(@"2222");

        NSLog(@"22%@",[NSThread currentThread]);

    });

    dispatch_async(quanjuQueue3, ^{

        NSLog(@"33333");

        NSLog(@"33%@",[NSThread currentThread]);

    });

    */

    

/**

//    创建分组dispatch_group_create()

//     dispatch_group_t 相当于  类名

    dispatch_group_t num1 = dispatch_group_create();

    dispatch_queue_t queue1 = dispatch_queue_create("num1",NULL);

    for (int i = 0; i < 5; i ++) {

        dispatch_group_async(num1, queue1, ^{

            NSLog(@"download2");

        });

    }

    

//   分组执行完毕 调用这个方法

    dispatch_group_notify(num1, queue1, ^{

        NSLog(@"执行完毕的代码1");

    });

    

    dispatch_group_t num2 = dispatch_group_create();

    dispatch_queue_t queue2 = dispatch_queue_create("num1",NULL);

    

    for (int i = 0; i < 3; i ++) {

        dispatch_group_async(num2, queue2, ^{

            NSLog(@"download3");

        });

    }

    

    //   分组执行完毕 调用这个方法

    dispatch_group_notify(num2, queue2, ^{

        NSLog(@"执行完毕的代码2");

    });

 

    */

}

@end


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值