美文网首页
多线程知识小记

多线程知识小记

作者: 没有黑眼圈de熊猫 | 来源:发表于2018-02-21 17:59 被阅读8次

1.锁必须是全局唯一的,加锁的前提条件是:多线程共享同一块资源。

加锁是需要代价的,加锁是耗费性能的。加锁的结果是:线程同步

@synchronized(锁对象)   { 需要锁定的代码 }

注意:锁定一份代码只用一把锁,用多把锁是无效的

互斥锁的优缺点:

优点:能有效防止因多线程抢夺资源造成的数据安全问题

缺点:需要消耗大量的CPU资源

线程同步的意思是:多条线程在同一条线上执行(按顺序的执行任务)

任务: 同步(不具备开启新线程的权利),异步(具备开启新线程的权利)

队列:串行(一个任务执行完毕后再执行下一个任务) 并行(允许多个任务同时执行)

同步函数:立刻马上执行,如果没有执行完,那么后面的也别想执行

异步函数:如果我没有执行完毕,那么后面的也可以执行

异步函数+并发队列:会开启多条线程,队列中的任务是异步执行,没有顺序

异步函数 +串行队列:会开启线程,开一条线程,队列中的任务是串行执行的

异步函数+ 主队列:所有任务都在主线程中执行,不会开线程

同步函数+主队列:死锁。

注意:如果该方法在子线程中执行,那么所有的任务在主线程中执行

同步函数+并发队列:不会开启线程,队列中的任务是串行执行

同步函数+串行队列:不会开启线程,队列中的人数是串行执行

并不是多少个任务开启多少个线程。开启线程数目是不确定的。

全局队列也是并发队列,全局的并发队列。

主队列是串行队列,但是所有任务都在主线程中执行

主队列特点:如果主队列发现当前主线程有任务在执行,那么主队列会暂停调用队列中的任务,知道主线程空闲为止。

栅栏函数

dispatch_barrier_async(queue, ^{

    });

栅栏函数:不能使用全局并发队列

栅栏函数可以控制多线程异步的执行顺序

快速迭代函数:

/*

     第一个函数:遍历的次数

     第二个函数:队列(并发队列)

     第三个函数:index 索引

     */

dispatch_apply(10, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(size_t index) {

        NSLog(@"----%zd---%@",index,[NSThread currentThread]);

    });

队列组:

dispatch_group_t group = dispatch_group_create();

//拦截通知,内部本身是异步的

    dispatch_group_notify(group, queue, ^{

        NSLog(@"----dispatch_group_notify-----");

    });

 将队列放到队列组里面执行,此通知可以在所有任务执行完毕后调用。

等待函数   DISPATCH_TIME_FOREVER死等 知道队列组里面的任务全部执行完毕之后才能执行    dispatch_group_wait(group, DISPATCH_TIME_FOREVER);

相关文章

  • 多线程知识小记

    1.锁必须是全局唯一的,加锁的前提条件是:多线程共享同一块资源。 加锁是需要代价的,加锁是耗费性能的。加锁的结果是...

  • iOS多线程知识点小记

    多线程 一、线程和任务 1)任务(task) 任务(task)是从程序中划分出来,可以独立执行的代码片段 任务间可...

  • Android 多线程

    Android多线程:你必须要了解的多线程基础知识汇总Android多线程:这是一份全面 & 详细的Handler...

  • 第35节:Java面向对象中的多线程

    Java面向对象中的多线程 多线程 在Java面向对象中的多线程中,要理解多线程的知识点,首先要掌握什么是进程,什...

  • Java基础(六)

    多线程 Java多线程并发 1.1 JAVA 并发知识库 1.2 JAVA 线程实现/创建方式 1.2.1 继承 ...

  • 多线程详解(1)——线程基本概念

    0. 简介 这个系列开始来讲解 Java 多线程的知识,这节就先讲解多线程的基本知识。 1. 进程与线程 1.1 ...

  • iOS多线程的一些知识点

    讲述一些有关iOS中的多线程知识点,以及一些应用实例 一、多线程基础知识 多线程是一个比较轻量级的方法来实现单个应...

  • Android开发 Java线程基础

    简介 本篇文章是带大家了解 Java多线程的基础知识.主要内容: 介绍多线程的概念, 了解多线程的优点, 状态, ...

  • Java多线程高级特性(JDK8)

    [TOC] 一、Java多线程 1.Java多线程基础知识 Java 给多线程编程提供了内置的支持。一条线程指的是...

  • OC的多线程1————关键词 以及 解决方案

    多线程知识梳理,通过了解多线程有关关键词,可以更好地方便了解多线程 ;稍后了解多线程的几种 解决方案 。 1.关键...

网友评论

      本文标题:多线程知识小记

      本文链接:https://www.haomeiwen.com/subject/ljsotftx.html