首頁在DispatchQueue中main隊列是串行隊列而global()隊列則是并行隊列,那么對于在他們中添加異步線程的執(zhí)行順序如何呢?
一、Main隊列中添加異步線程的執(zhí)行順序

在主隊列中添加異步線程
首先在主線程隊列中先添加一個異步線程然后讓當(dāng)前線程睡眠1秒,然后再在異步線程中再在主線程隊列中添加兩個異步線程,讓第二個異步線程先睡眠2秒再執(zhí)行,他們的輸出結(jié)果是:

上圖主線程隊列的輸出結(jié)果
結(jié)果分析:
首先main隊列是串行隊列,切記主隊列是串行隊列,所以首先會先睡眠1秒,然后執(zhí)行輸出后,才執(zhí)行第一個加入主隊列的異步任務(wù),所以先輸出3,再輸出2,最后輸出4??傊?,在串行隊列中,他們的執(zhí)行順序和他們加入隊列的順序有關(guān), 加入異步任務(wù)不會阻塞主線程也不會開辟新的線程,但是依舊串行。
二、global()隊列中添加異步線程的執(zhí)行順序

在全局隊列中添加異步線程
首先在全局隊列中先添加一個異步線程后當(dāng)前線程睡眠1秒,然后再該異步線程中再在全局隊列中添加兩個異步線程,讓第二個異步線程同樣先睡眠2秒再執(zhí)行,他們的輸出結(jié)果是:

上圖全局隊列的第一種輸出結(jié)果

上圖全局隊列的第二種輸出結(jié)果
結(jié)果分析:
global()隊列是異步隊列,那么在其中添加異步線程后就會立即執(zhí)行,所以才會出現(xiàn)上面兩種可能的結(jié)果。但是,最外面的當(dāng)前線程則是先睡眠1秒再執(zhí)行,里面添加的第二個異步線程則是先睡眠2秒執(zhí)行,所以才會出現(xiàn)上面的結(jié)果。所以,在異步隊列中異步線程的執(zhí)行和添加順序無關(guān)。