DEMO地址
1. 串行队列,同步执行
示例代码:

运行结果:

结束可以看到是在主线程顺序执行的
2. 串行队列,异步执行
示例代码:

运行结果:

结论可以看到系统只开了一条线程,都是在线程3上执行的,并且是顺序执行
3. 并发队列,同步执行
示例代码:

运行结果:

结论可以看到是在主线程上顺序执行的,跟第一种结论是一样的, 由此可以看出,开不开线程是同步换是异步控制的
4. 并发队列,异步执行
示例代码:

运行结果:

结论看出开启了多条线程并且是无序执行的
5. 全局队列,同步执行
示例代码:

运行结果:

结论可以看出是在主线程上顺序执行的
6. 全局队列,异步执行
示例代码:

运行结果:

结论可以看出是开启的多条线程,并且执行的顺序是混乱的,跟并发队列异步执行的结果是一样的
7. 主队列,同步执行
示例代码:

运行结果:

结论可以看出来,发生"死锁"了,卡死了,卡死的原因是循环等待,主队列的东西要等主线程执行完,而因为是同步执行不能开线程,所以下面的任务要等上面的任务执行完,所以卡死。这是排列组合中唯一一个会卡死的组合
8. 主队列,异步执行
示例代码:

运行结果:

结论可以看出来是在主线程顺序执行的
总结:
1, 同步开线程,异步不开线程,开不开线程是由同步换是异步控制的!
2, 开几条线程,取决于串行队列换是并发队列,串行队列只开一条线程,并发队列开多条线程(异步情况下)
3, 主队列只能在主线程下执行任务,不能再其他线程上执行!
DEMO地址

网友评论