//串行隊(duì)列 同步執(zhí)行任務(wù) 會(huì)在當(dāng)前線程內(nèi)執(zhí)行 //所以打印的會(huì)是當(dāng)前線程的編號(hào) 不一定是主線程
-(void)demo
{
//創(chuàng)建串行隊(duì)列 DISPATCH_QUEUE_SERIAL
// 并行隊(duì)列 DISPATCH_QUEUE_CONCURRENT
dispatch_queue_t queue=dispatch_queue_create("itcast", DISPATCH_QUEUE_SERIAL);
//創(chuàng)建任務(wù)
dispatch_block_t task1=^{
NSLog(@"%@ 同步執(zhí)行了方法1",[NSThread currentThread]);
};
dispatch_block_t task2=^{
NSLog(@"%@ 同步執(zhí)行了方法2",[NSThread currentThread]);
};
//加入隊(duì)列
//同步的方式 執(zhí)行隊(duì)列
dispatch_sync(queue, task1);
dispatch_sync(queue, task2);
}
//異步的方式 執(zhí)行串行隊(duì)列 會(huì)創(chuàng)建一個(gè)新的線程來(lái)執(zhí)行任務(wù)
-(void)demo2
{
//創(chuàng)建串行隊(duì)列 DISPATCH_QUEUE_SERIAL
// 并行隊(duì)列 DISPATCH_QUEUE_CONCURRENT
dispatch_queue_t queue=dispatch_queue_create("itcast", DISPATCH_QUEUE_SERIAL);
//創(chuàng)建任務(wù)
dispatch_block_t task1=^{
NSLog(@"%@ 異步執(zhí)行了方法1",[NSThread currentThread]);
};
dispatch_block_t task2=^{
NSLog(@"%@ 異步執(zhí)行了方法2",[NSThread currentThread]);
};
//加入隊(duì)列
//異步的方式 執(zhí)行隊(duì)列
//會(huì)順序執(zhí)行
dispatch_async(queue, task1);
dispatch_async(queue, task2);
}
1.異步執(zhí)行
dispatch_async(dispatch_get_global_queue(0, 0), ^{
// something
});
2.同步執(zhí)行
dispatch_sync(dispatch_get_global_queue(0, 0), ^{
// something
});
dispatch_get_global_queue(0, 0) //表示創(chuàng)建一個(gè)新的任務(wù)(可以理解成線程)執(zhí)行
dispatch_get_main_queue() //表示使用主線程調(diào)用block
3.一次性執(zhí)行(常用于單例模式)
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
// code to be executed once
});
4.定時(shí)執(zhí)行
double delayInSeconds = 2.0;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
// code to be executed on the main queue after delay
});
5.自定義任務(wù)隊(duì)列
dispatch_queue_t urls_queue = dispatch_queue_create("blog.devtang.com", NULL);
dispatch_async(urls_queue, ^{
// your code
});
dispatch_release(urls_queue);
6.任務(wù)組,匯總
dispatch_group_t group = dispatch_group_create();
dispatch_group_async(group, dispatch_get_global_queue(0,0), ^{
// 并行執(zhí)行的線程一
});
dispatch_group_async(group, dispatch_get_global_queue(0,0), ^{
// 并行執(zhí)行的線程二
});
dispatch_group_notify(group, dispatch_get_global_queue(0,0), ^{
// 匯總結(jié)果
});