GCD創建線程基礎

/*

    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塊裏邊放的是任務列表

    // dispatchGCD裏面常用的變量及函數名前綴

    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

發佈了73 篇原創文章 · 獲贊 4 · 訪問量 12萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章