多线程系列面试题2 - 线程的同步,异步,串行,并发

本文深入探讨了多线程中的同步与异步、串行与并发的区别。同步在主队列中会导致死锁,而在串行和并发队列中顺序执行。异步在主队列中不会开启新线程,而在并发队列中会并发执行。同步任务在串行队列和并发队列中都会率先运行,异步任务在所有队列中都会新开线程。了解这些概念对于避免死锁和优化线程执行至关重要。
摘要由CSDN通过智能技术生成

首先要分清楚

同步和异步是开启线程的能力区别

串行和并发指的是队列也就是开启的线程以什么方式执行

同步(sync)是不能开启线程的,不管是串行队列,并发队列还是主队列都只能串行执行

异步(async)只有在主队列执行是不能开启新线程的,因为主线程已经存在,然后在并发队列,执行并发操作,串行队列执行串行操作

面试题:

主队列

同步方式在主队列的情况

print("1")
DispatchQueue.main.sync {
    print("2")
}
print("3")

这个程序只会输出1,后面的2,3不好说了,因为sync本质上会直接执行,并不会有延时的情况,而print("3" )也是没有延时的所以会产生死锁,这种题特别容易出现在面试

print("1")
DispatchQueue.main.async {
    print("2")
}
print("3")

比如再来一题,这个答案是1,3,2理由是因为async本质上会等函数执行完再执行,但这里是个先后顺序问题,而并不是时间问题

print("1")
DispatchQueue.main.async {
    print("2")
}
print(
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值