GCD多线程

// 串行队列 , 线性同步
- ( IBAction )handleSyncQueue:( UIButton *)sender {
    //1. 获取串行队列
    //(1) 获取系统创建好的串行队列 , 主队列 , 在主线程中执行
    //dispatch_queue_t queue = dispatch_get_main_queue();
    //(2) 自己创建串行队列 , 在子线程中执行
    dispatch_queue_t queue = dispatch_queue_create ( "com.lanou3g.wang" , DISPATCH_QUEUE_SERIAL );
    //2. 往队列中添加任务
    dispatch_async (queue, ^{
        NSLog ( @" 任务一 , 当前线程 %@" , [ NSThread currentThread ]);
    });
    dispatch_async (queue, ^{
        NSLog ( @" 任务二 , 当前线程 %@" , [ NSThread currentThread ]);
    });
    dispatch_async (queue, ^{
        NSLog ( @" 任务三 , 当前线程 %@" , [ NSThread currentThread ]);
    });
    dispatch_async (queue, ^{
        NSLog ( @" 任务四 , 当前线程 %@" , [ NSThread currentThread ]);
    });
}
// 并行队列 , 线程并发
- ( IBAction )handleConcurrentQueue:( UIButton *)sender {
    //1. 获取并行队列
    //(1) 获取系统创建好的并行队列
    dispatch_queue_t queue = dispatch_get_global_queue ( DISPATCH_QUEUE_PRIORITY_DEFAULT , 0 );
    //2. 往队列中添加任务
    dispatch_async (queue, ^{
        NSLog ( @" 任务一 , 当前进程 %@" , [ NSThread currentThread ]);
    });
    dispatch_async (queue, ^{
        NSLog ( @" 任务二 , 当前进程 %@" , [ NSThread currentThread ]);
    });
    dispatch_async (queue, ^{
        NSLog ( @" 任务三 , 当前进程 %@" , [ NSThread currentThread ]);
    });
    dispatch_async (queue, ^{
        NSLog ( @" 任务四 , 当前进程 %@" , [ NSThread currentThread ]);
    });
}
// 分组任务
- ( IBAction )handleGroup:( UIButton *)sender {
    //1. 获取并发队列
    dispatch_queue_t queue = dispatch_get_global_queue ( DISPATCH_QUEUE_PRIORITY_DEFAULT , 0 );
    //2. 创建分组
    dispatch_group_t group = dispatch_group_create ();
    // 往队列中添加分组
    dispatch_group_async (group, queue, ^{
        NSLog ( @" 请求 0~1M 数据 , 当前线程 %@" , [ NSThread currentThread ]);
    });
    dispatch_group_async (group, queue, ^{
        NSLog ( @" 请求 1~2M 数据 , 当前线程 %@" , [ NSThread currentThread ]);
    });
    dispatch_group_async (group, queue, ^{
        NSLog ( @" 请求 2~3M 数据 , 当前线程 %@" , [ NSThread currentThread ]);
    });
    dispatch_group_async (group, queue, ^{
        NSLog ( @" 请求 3~4M 数据 , 当前线程 %@" , [ NSThread currentThread ]);
    });
}
// 整个程序运行期间 , 只执行一次
- ( IBAction )handleOnce:( UIButton *)sender {
    static dispatch_once_t onceToken;
    dispatch_once (&onceToken, ^{
       // 存放只会执行一次的代码 , 比如单例对象的创建 .
    });
}
// 障碍
- ( IBAction )handleBarrier:( UIButton *)sender {
    //1. 获取并发队列
    //dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
    // 如果要加障碍 , 必须要使用自己创建的队列
    // 自己创建并行队列
    dispatch_queue_t queue = dispatch_queue_create ( "com.lanou3g.zhang" , DISPATCH_QUEUE_CONCURRENT );
    dispatch_async (queue, ^{
        NSLog ( @"A, 写入 " );
    });
    dispatch_async (queue, ^{
        NSLog ( @"B, 写入 " );
    });
    dispatch_async (queue, ^{
        NSLog ( @"C, 写入 " );
    });
    dispatch_barrier_async (queue, ^{
        NSLog ( @" 障碍 , 读取数据 " );
    });
    dispatch_async (queue, ^{
        NSLog ( @"D, 写入 " );
    });
    dispatch_async (queue, ^{
        NSLog ( @"E, 写入 " );
    });
    dispatch_async (queue, ^{
        NSLog ( @"F, 写入 " );
    });

}
// 延迟
- ( IBAction )handleDelay:( UIButton *)sender {
    double second = 10.0 ;
    dispatch_after ( dispatch_time ( DISPATCH_TIME_NOW , ( int64_t )(second * NSEC_PER_SEC )), dispatch_get_main_queue (), ^{
        // 存放延迟 10.0 之后的任务
        NSLog ( @" 存放延迟 10.0 之后的任务 " );
    });
}
// 重复执行的任务
- ( IBAction )handleApply:( id )sender {
    dispatch_queue_t queue = dispatch_get_global_queue ( DISPATCH_QUEUE_PRIORITY_DEFAULT , 0 );
    NSArray *arr = @[ @"aa" , @"bb" , @"cc" , @"dd" , @"ee" , @"ff" , @"gg" ] ;
    // 如果每次只执行一个任务 , 则在主线程中执行 , 如果并发执行多次 , 主线程执行之外 , 还会分配子线程
    dispatch_apply ([arr count ], queue, ^( size_t index) {
        NSLog ( @" 任务 %lu, 当前线程 %@" , index + 1 , [ NSThread currentThread ]);
        NSLog ( @"%@" , arr[index]);
    });
   
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值