1. - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
  2.  
  3. // GCD 开几条线程并不是我们可以控制的,而是系统来决定的,
  4.  
  5. // [self asyncConcurrent];
  6. // [self asyncSerial];
  7. // [self syncConcurrent];
  8. // [self syncSerial];
  9. // [self test_get_global_queue];
    //   [self syncMain];//主线程操作直接死锁
  10.  
  11.     [NSThread detachNewThreadSelector:@selector(syncMain) toTarget:self withObject:nil];//在子线程地调用,会直接执行,不会死锁

  1. }
  2. /**
  3. 异步函数 + 并发队列 :会开启多条线程,队列中的任务是异步执行的(并发执行)(无序执行的)
  4. */
  5. - (void)asyncConcurrent{
  6. //1.创建任务
  7. /*
  8. 参数1:const char * _Nullable label , C语言参数 字符串 ,标识符,为了区分队列的 推荐写法:反着写
  9. 参数2:dispatch_queue_attr_t _Nullable attr,队列类型
  10. DISPATCH_QUEUE_CONCURRENT 并发,
  11. DISPATCH_QUEUE_SERIAL 串行
  12. */
  13. dispatch_queue_t queue = dispatch_queue_create("com.520it.www", DISPATCH_QUEUE_CONCURRENT);
  14. //2 2.1封装任务 2.2添加到任务队列中
  15. /**
  16. dispatch_async(<#dispatch_queue_t _Nonnull queue#>, <#^(void)block#>)
  17. 参数1:dispatch_queue_t _Nonnull queue 队列
  18. 参数2:<#^(void)block#> 要执行的任务
  19. */
  20. dispatch_async(queue, ^{
  21. NSLog(@"打印一下111 --- %@", [NSThread currentThread]);
  22. });
  23. dispatch_async(queue, ^{
  24. NSLog(@"打印一下222 --- %@", [NSThread currentThread]);
  25. });
  26. dispatch_async(queue, ^{
  27. NSLog(@"打印一下333 --- %@", [NSThread currentThread]);
  28. });
  29. }
  30. /**
  31. 异步函数 + 串行队列:可以开启线程,但是串行队列只会在同一个子线程执行
  32. */
  33. - (void)asyncSerial{
  34. dispatch_queue_t queue = dispatch_queue_create("asyncSerial", DISPATCH_QUEUE_SERIAL);
  35. dispatch_async(queue, ^{
  36. NSLog(@"打印一下111 --- %@", [NSThread currentThread]);
  37. });
  38. dispatch_async(queue, ^{
  39. NSLog(@"打印一下222 --- %@", [NSThread currentThread]);
  40. });
  41. dispatch_async(queue, ^{
  42. NSLog(@"打印一下333 --- %@", [NSThread currentThread]);
  43. });
  44. }
  45. /**
  46. 同步函数 + 并发队列 :不会会开启多条线程,不管后面是并发还是串行,任务是串行执行的
  47. */
  48. - (void)syncConcurrent{
  49. //1.创建任务
  50. dispatch_queue_t queue = dispatch_queue_create("com.520it.www", DISPATCH_QUEUE_CONCURRENT);
  51. dispatch_sync(queue, ^{
  52. NSLog(@"打印一下111 --- %@", [NSThread currentThread]);
  53. });
  54. dispatch_sync(queue, ^{
  55. NSLog(@"打印一下222 --- %@", [NSThread currentThread]);
  56. });
  57. dispatch_sync(queue, ^{
  58. NSLog(@"打印一下333 --- %@", [NSThread currentThread]);
  59. });
  60. }
  61. /**
  62. 同步函数 + 串行队列 :不会会开启多条线程,不管后面是并发还是串行,任务是串行执行的
  63. */
  64. - (void)syncSerial{
  65. dispatch_queue_t queue = dispatch_queue_create("syncSerial", DISPATCH_QUEUE_SERIAL);
  66. dispatch_sync(queue, ^{
  67. NSLog(@"打印一下111 --- %@", [NSThread currentThread]);
  68. });
  69. dispatch_sync(queue, ^{
  70. NSLog(@"打印一下222 --- %@", [NSThread currentThread]);
  71. });
  72. dispatch_sync(queue, ^{
  73. NSLog(@"打印一下333 --- %@", [NSThread currentThread]);
  74. });
  75. }
  76. /**
  77. 获得全局队列
  78. */
  79. -(void)test_get_global_queue{
  80. /**
  81. 获得全局并发队列 : 这个队列已经存在的, 我们只是获得
  82. 参数1 : long identifier 优先级,
  83. DISPATCH_QUEUE_PRIORITY_HIGH 2
  84. DISPATCH_QUEUE_PRIORITY_DEFAULT 0
  85. DISPATCH_QUEUE_PRIORITY_LOW (-2)
  86. DISPATCH_QUEUE_PRIORITY_BACKGROUND INT16_MIN 这是最低的优先级
  87. 参数2 : unsigned long flags 给未来使用, 总是给个0
  88. */
  89. dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
  90. dispatch_async(queue, ^{
  91. NSLog(@"打印一下111 --- %@", [NSThread currentThread]);
  92. });
  93. dispatch_async(queue, ^{
  94. NSLog(@"打印一下222 --- %@", [NSThread currentThread]);
  95. });
  96. dispatch_async(queue, ^{
  97. NSLog(@"打印一下333 --- %@", [NSThread currentThread]);
  98. });
  99. }

  

1.

2

3.

4.

5.

8. 

OC 线程操作 - GCD使用 -同步函数,异步函数,串行队列,并发队列的更多相关文章

  1. OC 线程操作 - GCD使用 - 栅栏函数

    - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{ //同步函数无需栅栏函数 //栅栏 ...

  2. OC 线程操作 - GCD使用 -线程通讯, 延迟函数和一次性代码

    - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{ // [self downImag ...

  3. OC 线程操作 - GCD队列组

    1.队列组两种使用方法2.队列组等待 wait /** 新方法 队列组一般用在在异步操作,在主线程写队列组毫无任何作用 */ - (void)GCD_Group_new_group___notify{ ...

  4. OC 线程操作 - GCD快速迭代

    - (void)forDemo{ //全都是在主线程操作的 ; i<; i++) { NSLog(@"--%@", [NSThread currentThread]); } ...

  5. iOS GCD, 同步,异步,串行队列,并行队列,dispatch_group

    同步,指代码在同一个线程运行 异步,代码在另一个线程运行 串行队列,提交到该队列的block会顺序执行 并行队列,提交到该队列的block会并发执行 如果想等某一队列中所有block都执行完了在执行一 ...

  6. ios--进程/多线程/同步任务/异步任务/串行队列/并行队列(对比分析)

    现在先说两个基本的概念,啥是进程,啥是线程,啥又是多线程;先把这两个总是给弄清再讲下面的 进程:正在进行的程序,我们就叫它进程. 线程:线程就是进程中的一个独立的执行路径.这句话怎么理解呢! 一个程序 ...

  7. OC线程操作-GCD介绍

    1. GCD介绍 1.11.2 1.3 异步具备开启能力但是不是 一定可以开启 1.4 1.5 67. 8.

  8. GCD死锁,及同步、异步、串行和并行队列组合情形

      一.概述 1)队列用来存储代码任务,线程用来运行代码任务: 2)main()函数作为程序入口,整个程序默认运行在主线程中,程序代码任务默认存放在主队列中: 3)以下所谓阻塞线程是针对主线程而言(子 ...

  9. iOS:对GCD中 同步、异步、并行、串行的见解

    1.GCD-同步执行多线程时          GCD中不管向什么类型的队列加同步任务,实际上都会加到当前线程中(一般为主线程). 2.GCD-异步执行多线程时          GCD中不管向什么类 ...

随机推荐

  1. RAID磁盘阵列的原理与搭建

    学习导图 RAID-0结构关系图 RAID-1结构关系图 RAID-5:条带+分布校验(三块磁盘以上) RAID-10:镜像+条带(四块磁盘以上) RAID-0 添加两块硬盘,分别为磁盘1.磁盘2.最 ...

  2. MapReduce On YARN

    MapReduce计算框架 将计算过程分为两个阶段:Map和Reduce Map阶段并行处理输入数据: Reduce阶段对Map结果进行汇总 Shuffle连接Map和Reduce两个阶段 Map T ...

  3. CSS3 盒阴影(box-shadow)详解

    CSS3 的 box-shadow 有点类似于 text-shadow,只不过不同的是 text-shadow 是对象的文本设置阴影,而 box-shadow 是给对象实现图层阴影效果.本文我们搁下I ...

  4. ElasticSearch 在3节点集群的启动

    ElasticSearch的启动分前台和后台启动 先介绍前台启动: 先在master节点上启动 可以看到已经启动了 同时在slave1.slave2节点上也启动 可以看到都已经启动了! 在浏览器分别打 ...

  5. Executor框架(三)线程池详细介绍与ThreadPoolExecutor

    本文将介绍线程池的设计细节,这些细节与 ThreadPoolExecutor类的参数一一对应,所以,将直接通过此类介绍线程池. ThreadPoolExecutor类 简介   java.uitl.c ...

  6. PS前端

    学习使用Photoshop的基本使用,以及Photoshop中关于切图这一块的知识,目的是能熟练使用Photoshop查看UI设计师的设计效果图,同时利用Photoshop切图来制作专业html页面. ...

  7. Linux编辑器|gedit|vi|vim编辑器

    gedit编辑器 gedit是一个Linux环境下的文本编辑器,类似windows下的写字板程序,在不需要特别复杂的编程环境下,作为基本的文本编辑器比较合适. sublime编辑器 Sublime T ...

  8. leetcode237

    /** * Definition for singly-linked list. * public class ListNode { * public int val; * public ListNo ...

  9. PPT怎么母版怎么修改及应用

    打开一个PPT,假设我要建一个母版(目的就是母版容易全部修改,不用同样的内容一个一个改) 然后点击如图"视图"+"幻灯片母版" 然后就会出现一个这样的工具栏界面 ...

  10. 使用Teleport Ultra批量克隆网站,使用Easy CHM合并生成chm文件

    1.要下载的页面 http://www.howsoftworks.net/javaapi/ 2. 下载Teleport Ultra 3.使用Teleport Ultra批量克隆网站 4.下载Easy ...