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