首页在DispatchQueue中main队列是串行队列而global()队列则是并行队列,那么对于在他们中添加异步线程的执行顺序如何呢?
一、Main队列中添加异步线程的执行顺序
首先在主线程队列中先添加一个异步线程然后让当前线程睡眠1秒,然后再在异步线程中再在主线程队列中添加两个异步线程,让第二个异步线程先睡眠2秒再执行,他们的输出结果是:
结果分析:
首先main队列是串行队列,切记主队列是串行队列,所以首先会先睡眠1秒,然后执行输出后,才执行第一个加入主队列的异步任务,所以先输出3,再输出2,最后输出4。总之,在串行队列中,他们的执行顺序和他们加入队列的顺序有关, 加入异步任务不会阻塞主线程也不会开辟新的线程,但是依旧串行。
二、global()队列中添加异步线程的执行顺序
首先在全局队列中先添加一个异步线程后当前线程睡眠1秒,然后再该异步线程中再在全局队列中添加两个异步线程,让第二个异步线程同样先睡眠2秒再执行,他们的输出结果是:
结果分析:
global()队列是异步队列,那么在其中添加异步线程后就会立即执行,所以才会出现上面两种可能的结果。但是,最外面的当前线程则是先睡眠1秒再执行,里面添加的第二个异步线程则是先睡眠2秒执行,所以才会出现上面的结果。所以,在异步队列中异步线程的执行和添加顺序无关。