dispatch_group_enter 缠劝、 dispatch_group_leave

dispatch_group_enter和dispatch_group_leave必須成對出現(xiàn) ,來給group添加新任務(wù)挤巡。

dispatch_group_enter(group)
//執(zhí)行的事件
dispatch_group_leave(group)

為什么會用到這個方法呢剩彬?
因為在dispatch_group_async()里使用dispatch_async()方法,dispatch_group_notify不是在最后執(zhí)行的矿卑。而dispatch_sync()方法調(diào)用的時候正常喉恋。代碼如下:

一、使用dispatch_group_async()方法
1母廷、異步里異步并發(fā)

    dispatch_queue_t queue = dispatch_queue_create("dispatchGroupMethod1.queue", DISPATCH_QUEUE_CONCURRENT);
    dispatch_group_t group = dispatch_group_create();
    
    dispatch_group_async(group, queue, ^{
        dispatch_async(queue, ^{
            for (NSInteger i =0; i<3; i++) {
                sleep(1);
                NSLog(@"任務(wù)1-異步任務(wù)執(zhí)行-:%ld,thread:%@",(long)i,[NSThread currentThread]);
            }
        });
    });
    
    dispatch_group_async(group, queue, ^{
        dispatch_async(queue, ^{
            for (NSInteger i =0; i<3; i++) {
                sleep(1);
                NSLog(@"任務(wù)2-異步任務(wù)執(zhí)行-:%ld,thread:%@",(long)i,[NSThread currentThread]);
            }
        });
    });
    
    //等待上面的任務(wù)全部完成后轻黑,會收到通知執(zhí)行block中的代碼 (不會阻塞線程)
    dispatch_group_notify(group, queue, ^{
        NSLog(@"全部任務(wù)執(zhí)行完成");
    });
//打印如下
2018-03-09 16:54:37.009913+0800 ceshi[3934:349413] 全部任務(wù)執(zhí)行完成
2018-03-09 16:54:38.014204+0800 ceshi[3934:349411] 任務(wù)1-異步任務(wù)執(zhí)行-:0,thread:<NSThread: 0x60000026cb00>{number = 3, name = (null)}
2018-03-09 16:54:38.014204+0800 ceshi[3934:349414] 任務(wù)2-異步任務(wù)執(zhí)行-:0,thread:<NSThread: 0x6040004799c0>{number = 4, name = (null)}
2018-03-09 16:54:39.018626+0800 ceshi[3934:349414] 任務(wù)2-異步任務(wù)執(zhí)行-:1,thread:<NSThread: 0x6040004799c0>{number = 4, name = (null)}
2018-03-09 16:54:39.018626+0800 ceshi[3934:349411] 任務(wù)1-異步任務(wù)執(zhí)行-:1,thread:<NSThread: 0x60000026cb00>{number = 3, name = (null)}
2018-03-09 16:54:40.020653+0800 ceshi[3934:349411] 任務(wù)1-異步任務(wù)執(zhí)行-:2,thread:<NSThread: 0x60000026cb00>{number = 3, name = (null)}
2018-03-09 16:54:40.020653+0800 ceshi[3934:349414] 任務(wù)2-異步任務(wù)執(zhí)行-:2,thread:<NSThread: 0x6040004799c0>{number = 4, name = (null)}

異步并發(fā),dispatch_group_notify先執(zhí)行琴昆,沒在最后調(diào)用氓鄙。

2、異步里同步并發(fā):

    dispatch_queue_t queue = dispatch_queue_create("dispatchGroupMethod1.queue", DISPATCH_QUEUE_CONCURRENT);
    dispatch_group_t group = dispatch_group_create();
    dispatch_group_async(group, queue, ^{
        dispatch_sync(queue, ^{
            for (NSInteger i =0; i<3; i++) {
                sleep(1);
                NSLog(@"任務(wù)1-同步任務(wù)執(zhí)行-:%ld,thread:%@",(long)i,[NSThread currentThread]);
            }
        });
    });
    
    dispatch_group_async(group, queue, ^{
        dispatch_sync(queue, ^{
            for (NSInteger i =0; i<3; i++) {
                sleep(1);
                NSLog(@"任務(wù)2-同步任務(wù)執(zhí)行-:%ld,thread:%@",(long)i,[NSThread currentThread]);
            }
        });
    });
    
    //等待上面的任務(wù)全部完成后业舍,會收到通知執(zhí)行block中的代碼 (不會阻塞線程)
    dispatch_group_notify(group, queue, ^{
        NSLog(@"全部任務(wù)執(zhí)行完成");
    });
//打印如下
2018-03-09 16:56:42.372297+0800 ceshi[3985:353717] 任務(wù)2-同步任務(wù)執(zhí)行-:0,thread:<NSThread: 0x604000273e40>{number = 4, name = (null)}
2018-03-09 16:56:42.372297+0800 ceshi[3985:353715] 任務(wù)1-同步任務(wù)執(zhí)行-:0,thread:<NSThread: 0x604000273e00>{number = 3, name = (null)}
2018-03-09 16:56:43.374677+0800 ceshi[3985:353717] 任務(wù)2-同步任務(wù)執(zhí)行-:1,thread:<NSThread: 0x604000273e40>{number = 4, name = (null)}
2018-03-09 16:56:43.374677+0800 ceshi[3985:353715] 任務(wù)1-同步任務(wù)執(zhí)行-:1,thread:<NSThread: 0x604000273e00>{number = 3, name = (null)}
2018-03-09 16:56:44.380101+0800 ceshi[3985:353715] 任務(wù)1-同步任務(wù)執(zhí)行-:2,thread:<NSThread: 0x604000273e00>{number = 3, name = (null)}
2018-03-09 16:56:44.380101+0800 ceshi[3985:353717] 任務(wù)2-同步任務(wù)執(zhí)行-:2,thread:<NSThread: 0x604000273e40>{number = 4, name = (null)}
2018-03-09 16:56:44.380617+0800 ceshi[3985:353717] 全部任務(wù)執(zhí)行完成

二抖拦、使用dispatch_group_enter和dispatch_group_leave

1、異步執(zhí)行

//異步
dispatch_queue_t queue = dispatch_queue_create("dispatchGroupMethod1.queue", DISPATCH_QUEUE_CONCURRENT);
    dispatch_group_t group = dispatch_group_create();
    
    dispatch_async(queue, ^{
        dispatch_group_enter(group);
        for (NSInteger i =0; i<3; i++) {
            sleep(1);
            NSLog(@"任務(wù)1-異步任務(wù)執(zhí)行-:%ld,thread:%@",(long)i,[NSThread currentThread]);
        }
        dispatch_group_leave(group);
    });
    
    dispatch_async(queue, ^{
        dispatch_group_enter(group);
        for (NSInteger i =0; i<3; i++) {
            sleep(1);
            NSLog(@"任務(wù)2-異步任務(wù)執(zhí)行-:%ld,thread:%@",(long)i,[NSThread currentThread]);
        }
        dispatch_group_leave(group);
    });
    //等待上面的任務(wù)全部完成后舷暮,會收到通知執(zhí)行block中的代碼 (不會阻塞線程)
    dispatch_group_notify(group, queue, ^{
        NSLog(@"全部任務(wù)執(zhí)行完成");
    });
//結(jié)果
2018-03-09 17:28:47.644739+0800 ceshi[4322:392667] 任務(wù)2-異步任務(wù)執(zhí)行-:0,thread:<NSThread: 0x600000266b00>{number = 4, name = (null)}
2018-03-09 17:28:47.644739+0800 ceshi[4322:392666] 任務(wù)1-異步任務(wù)執(zhí)行-:0,thread:<NSThread: 0x60400027dbc0>{number = 3, name = (null)}
2018-03-09 17:28:48.646245+0800 ceshi[4322:392667] 任務(wù)2-異步任務(wù)執(zhí)行-:1,thread:<NSThread: 0x600000266b00>{number = 4, name = (null)}
2018-03-09 17:28:48.646245+0800 ceshi[4322:392666] 任務(wù)1-異步任務(wù)執(zhí)行-:1,thread:<NSThread: 0x60400027dbc0>{number = 3, name = (null)}
2018-03-09 17:28:49.650996+0800 ceshi[4322:392667] 任務(wù)2-異步任務(wù)執(zhí)行-:2,thread:<NSThread: 0x600000266b00>{number = 4, name = (null)}
2018-03-09 17:28:49.650996+0800 ceshi[4322:392666] 任務(wù)1-異步任務(wù)執(zhí)行-:2,thread:<NSThread: 0x60400027dbc0>{number = 3, name = (null)}
2018-03-09 17:28:49.651347+0800 ceshi[4322:392666] 全部任務(wù)執(zhí)行完成

2态罪、同步執(zhí)行

//同步
 dispatch_queue_t queue = dispatch_queue_create("dispatchGroupMethod1.queue", DISPATCH_QUEUE_CONCURRENT);
    dispatch_group_t group = dispatch_group_create();
    
    dispatch_sync(queue, ^{
        dispatch_group_enter(group);
        for (NSInteger i =0; i<3; i++) {
            sleep(1);
            NSLog(@"任務(wù)1-同步任務(wù)執(zhí)行-:%ld,thread:%@",(long)i,[NSThread currentThread]);
        }
        dispatch_group_leave(group);
    });
    
    dispatch_sync(queue, ^{
        dispatch_group_enter(group);
        for (NSInteger i =0; i<3; i++) {
            sleep(1);
            NSLog(@"任務(wù)2-同步任務(wù)執(zhí)行-:%ld,thread:%@",(long)i,[NSThread currentThread]);
        }
        dispatch_group_leave(group);
    });
    //等待上面的任務(wù)全部完成后,會收到通知執(zhí)行block中的代碼 (不會阻塞線程)
    dispatch_group_notify(group, queue, ^{
        NSLog(@"全部任務(wù)執(zhí)行完成");
    });

//結(jié)果
2018-03-09 17:42:34.271283+0800 ceshi[4454:413740] 任務(wù)1-同步任務(wù)執(zhí)行-:0,thread:<NSThread: 0x600000068980>{number = 1, name = main}
2018-03-09 17:42:35.272241+0800 ceshi[4454:413740] 任務(wù)1-同步任務(wù)執(zhí)行-:1,thread:<NSThread: 0x600000068980>{number = 1, name = main}
2018-03-09 17:42:36.273663+0800 ceshi[4454:413740] 任務(wù)1-同步任務(wù)執(zhí)行-:2,thread:<NSThread: 0x600000068980>{number = 1, name = main}
2018-03-09 17:42:37.275635+0800 ceshi[4454:413740] 任務(wù)2-同步任務(wù)執(zhí)行-:0,thread:<NSThread: 0x600000068980>{number = 1, name = main}
2018-03-09 17:42:38.276095+0800 ceshi[4454:413740] 任務(wù)2-同步任務(wù)執(zhí)行-:1,thread:<NSThread: 0x600000068980>{number = 1, name = main}
2018-03-09 17:42:39.277732+0800 ceshi[4454:413740] 任務(wù)2-同步任務(wù)執(zhí)行-:2,thread:<NSThread: 0x600000068980>{number = 1, name = main}
2018-03-09 17:42:39.278429+0800 ceshi[4454:413852] 全部任務(wù)執(zhí)行完成

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末下面,一起剝皮案震驚了整個濱河市复颈,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌沥割,老刑警劉巖耗啦,帶你破解...
    沈念sama閱讀 216,470評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異机杜,居然都是意外死亡帜讲,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評論 3 392
  • 文/潘曉璐 我一進(jìn)店門椒拗,熙熙樓的掌柜王于貴愁眉苦臉地迎上來舒帮,“玉大人,你說我怎么就攤上這事陡叠。” “怎么了肢执?”我有些...
    開封第一講書人閱讀 162,577評論 0 353
  • 文/不壞的土叔 我叫張陵枉阵,是天一觀的道長。 經(jīng)常有香客問我预茄,道長兴溜,這世上最難降的妖魔是什么侦厚? 我笑而不...
    開封第一講書人閱讀 58,176評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮拙徽,結(jié)果婚禮上刨沦,老公的妹妹穿的比我還像新娘。我一直安慰自己膘怕,他們只是感情好想诅,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,189評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著岛心,像睡著了一般来破。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上忘古,一...
    開封第一講書人閱讀 51,155評論 1 299
  • 那天徘禁,我揣著相機(jī)與錄音,去河邊找鬼髓堪。 笑死送朱,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的干旁。 我是一名探鬼主播驶沼,決...
    沈念sama閱讀 40,041評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼疤孕!你這毒婦竟也來了商乎?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,903評論 0 274
  • 序言:老撾萬榮一對情侶失蹤祭阀,失蹤者是張志新(化名)和其女友劉穎鹉戚,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體专控,經(jīng)...
    沈念sama閱讀 45,319評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡抹凳,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,539評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了伦腐。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片赢底。...
    茶點(diǎn)故事閱讀 39,703評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖柏蘑,靈堂內(nèi)的尸體忽然破棺而出幸冻,到底是詐尸還是另有隱情,我是刑警寧澤咳焚,帶...
    沈念sama閱讀 35,417評論 5 343
  • 正文 年R本政府宣布洽损,位于F島的核電站,受9級特大地震影響革半,放射性物質(zhì)發(fā)生泄漏碑定。R本人自食惡果不足惜流码,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,013評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望延刘。 院中可真熱鬧漫试,春花似錦、人聲如沸碘赖。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽崖疤。三九已至秘车,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間劫哼,已是汗流浹背叮趴。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留权烧,地道東北人眯亦。 一個月前我還...
    沈念sama閱讀 47,711評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像般码,于是被迫代替她去往敵國和親妻率。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,601評論 2 353

推薦閱讀更多精彩內(nèi)容

  • 本文首發(fā)于我的個人博客:「程序員充電站」[https://itcharge.cn]文章鏈接:「傳送門」[https...
    ITCharge閱讀 347,830評論 308 1,926
  • 背景 擔(dān)心了兩周的我終于輪到去醫(yī)院做胃鏡檢查了板祝!去的時候我都想好了最壞的可能(胃癌)宫静,之前在網(wǎng)上查的癥狀都很相似。...
    Dely閱讀 9,237評論 21 42
  • 同步/異步 同步:多個任務(wù)情況下券时,一個任務(wù)A執(zhí)行結(jié)束孤里,才可以執(zhí)行另一個任務(wù)B。只存在一個線程也就是主線程橘洞。 異步:...
    XLsn0w閱讀 302評論 0 0
  • 減肥的受眾人群是龐大的。 在很多人心中适肠,肥胖這種因?qū)ψ陨矸湃味鴮?dǎo)致的后果被視為了疾不羯馈!疾病就需要治療侯养,于是大街上隨...
    羅隨緣閱讀 1,924評論 10 43
  • <head> 或 <body> 中的 JavaScript 您可以在 HTML 文檔中放入不限數(shù)量的腳本敦跌。腳本可位...
    海娩閱讀 182評論 0 0