GCD 多线程

来源:互联网 发布:js正方形3d立体旋转 编辑:程序博客网 时间:2024/06/03 21:54

#pragma mark ---- 用异步函数往并发队列中添加任务

- (void)setUpSuperView{

  

    

    

    //获取全局的并发队列

    

    dispatch_queue_t queue =dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0);

    //添加任务到队列中,就可以执行任务了 异步函数,具备开启新线程的能力

    

    dispatch_async(queue, ^{

        NSLog(@"下载图片1----%@",[NSThreadcurrentThread]);

    });

    

    

    

    dispatch_async(queue, ^{

          NSLog(@"下载图片2----%@",[NSThreadcurrentThread]);

    });

    

    

    dispatch_async(queue, ^{

         NSLog(@"下载图片3----%@",[NSThreadcurrentThread]);

    });

    //打印主线程

 

    NSLog(@"主线程----%@",[NSThreadmainThread]);

    

    

    //总结:同时开启三个子线程

    

}



#pragma mark ---用异步函数往串行队列中添加任务

- (void)setUpTowSuperView{

    

    

    //创建串行队列

    dispatch_queue_t queue =dispatch_queue_create("zhangyu",NULL);

    

    //添加任务到队列中执行

    dispatch_async(queue, ^{

        NSLog(@"下载图片1----%@",[NSThreadcurrentThread]);

    });

    

    dispatch_async(queue, ^{

        NSLog(@"下载图片2----%@",[NSThreadcurrentThread]);

    });

    

    dispatch_async(queue, ^{

        NSLog(@"下载图片3----%@",[NSThreadcurrentThread]);

    });

     NSLog(@"主线程----%@",[NSThreadmainThread]);

    

    

    //总结:会开启线程,但是只会开启一条线程

}

//丘吉尔说:我最辉煌的成就,是我竟能说服我的妻子嫁给我











#pragma mark ---用同步函数往并发队列中添加任务

- (void)setUpThreeSuperView{

    

    

    

    //获取全局的并发队列

    dispatch_queue_t queue =dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0);

    

    //添加任务到队列中执行

    dispatch_sync(queue, ^{

        NSLog(@"下载图片1----%@",[NSThreadcurrentThread]);

    });

    

    dispatch_sync(queue, ^{

        NSLog(@"下载图片2----%@",[NSThreadcurrentThread]);

    });

    

    

    dispatch_sync(queue, ^{

        NSLog(@"下载图片3----%@",[NSThreadcurrentThread]);

    });

    

    

    //打印主线程

    NSLog(@"主线程----%@",[NSThreadmainThread]);

    

    

    //总结:不会开启新的线程,并发队列失去了并发的功能

    

    

}




#pragma mark --- 用同步函数往串行队列中添加任务

- (void)setUpFourSuperView{

    

    

    

    //创建串行队列

    dispatch_queue_t queue =dispatch_queue_create("zhangyu",NULL);

    

    //添加任务到队列中执行

    

    dispatch_sync(queue, ^{

         NSLog(@"下载图片1----%@",[NSThreadcurrentThread]);

    });

    

    dispatch_sync(queue, ^{

         NSLog(@"下载图片2----%@",[NSThreadcurrentThread]);

    });

    

    

    dispatch_sync(queue, ^{

        NSLog(@"下载图片3----%@",[NSThreadcurrentThread]);

    });

    

    

    //打印主线程

     NSLog(@"主线程----%@",[NSThreadmainThread]);

    

    

    //总结:不会开启新的线程

    


}