/*
1 主隊列(串行) Main Queue
2 全局隊列 Global Queue
3 自己創建的隊列 create
如果隊列裏有多個任務,GCD會根據系統的負載合理的分配線程數,不能自己設置併發的數量
*/
- (void)viewDidLoad {
[superviewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
// [self getMainQueue];
// [self getGlobalQueue];
[selfcreateQueue];
}
#pragma mark -- 獲取主隊列
-(void)getMainQueue
{
// 1隊列名稱 2 block塊裏邊放的是任務列表
// dispatch是GCD裏面常用的變量及函數名前綴
dispatch_async(dispatch_get_main_queue(), ^{
//休眠
sleep(1.0);
//打印當前線程
NSLog(@"currentThread == %@",[NSThreadcurrentThread]);
//是否是主線程
NSLog(@"isMain == %d",[NSThreadisMainThread]);
//判斷當前是否是多線程
NSLog(@"ismutiple == %d",[NSThreadisMultiThreaded]);
});
}
#pragma mark -- 全局隊列
-(void)getGlobalQueue
{
// 1創建隊列
//1 運行優先標誌(高,默認,低,後臺) 2參數標誌,給個0就行
dispatch_queue_t queue =dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW,0);
// dispatch_get_global_queue全局隊列,
/*
在隊列裏邊可以運行多個任務,每個任務的啓動時間,是按照加入隊列裏的任務來的---先進先出
全局隊列能夠實現並行,獲取不同的全局隊列開啓線程不同,我們不能創建全局隊列,只能獲取和調度
*/
//在全局隊列裏添加任務
//按照順序執行
dispatch_async(queue, ^{
[selfprintFirst];
[selfprintSecond];
});
}
#pragma mark -- 創建隊列
-(void)createQueue
{
//前邊是接受隊列 後邊是創建隊列的函數
// 1參數 隊列的標識
// 2參數 分配是串行隊列還是串行隊列,可以置爲NULL
//隊列的類型 dispatch_queue_t
//並行隊列 DISPATCH_QUEUE_CONCURRENT
//串行隊列 DISPATCH_QUEUE_SERIAL
dispatch_queue_t myQueue =dispatch_queue_create("myQueue",DISPATCH_QUEUE_CONCURRENT);
/* //隊列的同步演示
//只要是同步的,就不會開闢線程
dispatch_sync(myQueue, ^{
//創建線程數
NSLog(@"currentThread == %@",[NSThread currentThread]);
//判斷當前是否是多線程
NSLog(@" isMultiThread == %d",[NSThread isMultiThreaded]);
[self printFirst];
[self printThree];
});
dispatch_sync(myQueue, ^{
[self printSecond];
});
*/
// #if 0
//異步隊列演示 自動開闢新線程
dispatch_async(myQueue, ^{
NSLog(@"currentThread == %@",[NSThreadcurrentThread]);
//判斷當前是否是多線程
NSLog(@"ismutiple == %d",[NSThreadisMultiThreaded]);
//在隊列裏的任務是串行的
[selfprintFirst];
[selfprintThree];
});
dispatch_async(myQueue, ^{
[selfprintSecond];
[selfprintFour];
});
// #endif
}
#pragma mark -- 任務1
-(void)printFirst
{
for (int i =0; i <2; i++) {
[NSThreadsleepForTimeInterval:1.0];
NSLog(@"action task 1 -- %d",i);
}
}
#pragma mark -- 任務2
-(void)printSecond
{
for (int i =3; i <6; i++) {
[NSThreadsleepForTimeInterval:1.0];
NSLog(@"action task 2 -- %d",i);
}
}
#pragma mark -- 任務3
-(void)printThree
{
for (int i =7; i <11; i++) {
[NSThreadsleepForTimeInterval:1.0];
NSLog(@"action task 3 -- %d",i);
}
}
#pragma mark -- 任務4
-(void)printFour
{
for (int i =12; i <15; i++) {
[NSThreadsleepForTimeInterval:1.0];
NSLog(@"action task 4 -- %d",i);
}
}
//GCD應用實例之一
/*//獲取全局隊列
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0), ^{
NSURL * url = [NSURL URLWithString:@"http://www.baidu.com"];
NSError * error;
NSString * data = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:&error];
if (data !=nil) {
//回到主線程打印數據
dispatch_async(dispatch_get_main_queue(), ^{
NSLog(@"data is: %@", data);
});
} else {
NSLog(@"error:%@", error);
}
});
*/
歡迎交流指正Demo下載:http://download.csdn.net/detail/bddzzw/9598720