iOS 多线程简单使用

释放双眼,带上耳机,听听看~!

1、

dispatch_queue_t queue = dispatch_queue_create("shddj", DISPATCH_QUEUE_SERIAL);
dispatch_async(queue, ^{
    NSLog(@"1");
    dispatch_sync(queue, ^{
        NSLog(@"2");
    });
    NSLog(@"3");
});

生成一个串行队列,队列中的block按照先进先出(FIFO)的顺序去执行,实际上为单线程执行。第一个block异步添加到穿行队列,先打印 “1”,然后同步向串行队列添加第二个block,造成线程阻塞,即死锁,程序崩溃;

2、

dispatch_queue_t queue = dispatch_queue_create("concurrent_queue", DISPATCH_QUEUE_CONCURRENT);
dispatch_async(queue, ^{
    NSLog(@"1");
    dispatch_sync(queue, ^{
        NSLog(@"2");
    });
    NSLog(@"3");
});
NSLog(@"4");
while (1) { }
NSLog(@"5");

生成一个并发队列,并异步添加最外层block到并发队列,主线程在添加完继续执行 NSLog(@”4″),因为 NSLog(@”2″) 是同步任务,要在执行完 NSLog(@”2″) 采取执行 NSLog(@”3″);

人已赞赏
iOS文章

NS_ASSUME_NONNULL_BEGIN & NS_ASSUME_NONNULL_END

2019-10-14 22:53:07

iOS文章

iOS自动化打包

2019-10-15 2:41:34

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
有新消息 消息中心
搜索