zoukankan      html  css  js  c++  java
  • 安卓中并发总结

    安卓中并发总结

    一、JMM内存模型和并发

    JMM规定了内存主要划分为主内存和工作内存两种,内存模型示意如下:

    1、缓存一致性

    现在的手机通常有两个或者多个CPU,其中一些CPU还有多核。每个CPU在某一时刻都能运行一个线程,这就意味着,如果你的Java程序是多线程的,那么就有可能存在多个线程在同一时刻被不同的CPU执行的情况。

    2、指令重排

    为了使CPU内部的运算单元能够尽量被充分利用,处理器可能会对输入的字节码指令进行重排序处理,也就是处理器优化。除了CPU之外,很多编程语言的编译器也会有类似的优化,比如Java虚拟机的即时编译器(JIT)也会做指令重排。

    3、内存交互操作

    4、内存屏障

    Store:将处理器缓存的数据刷新到内存中。
    Load:将内存存储的数据拷贝到处理器的缓存中。

    实际上就是如果CPU在指令优化是给一个标记位置,碰到此位置不进行优化

    二、锁

    1、临界区和竞态条件

    一段代码块内如果存在对共享资源的多线程读写操作,称这段代码为临界区
    多个线程在临界区内执行,由于代码执行序列不同而导致结果无法预测,称之为静态条件

    2、应用之互斥

    为了避免临界区的竞态条件发生,JAVA提供多种手段进行规避
    阻塞式的解决方案:synchronized,Lock
    非阻塞式的解决方案:原子变量
    synchronized对象锁:
    采用互斥方式让统一时刻之多只有一个线程持有对象锁,其他线程在获取这个对象锁会被阻塞,不用担心线程上下文切换。

    3、Monitor对象与synchronized

    执行同步代码块内容,然后唤醒entryList中其他线程时,此处采取竞争策略,先到不一定先得,所以synchronize锁是非公平
    非公平锁: 在锁可用的时候,一个新到来的线程要占有锁,可以不需要排队,直接获得。
    公平锁: 在锁可用的时候,一个新到来的线程要占有锁,需要排队,等待执行

    4、CAS

    CAS是英文单词Compare And Swap的缩写,翻译过来就是比较并替换。
    CAS机制当中使用了3个基本操作数:内存地址V、旧的预期值A、要修改的新值B
    更新一个变量的时候,只有当变量的预期值A和内存地址V当中的实际值相同时,才会将内存地址V对应的值修改为B。

    三、CAS和原子变量

    待更新

    四、线程池

    待更新

    五、AQS

    待更新

  • 相关阅读:
    Python Special Syntax 7:继承
    Python Special Syntax 6:模块的__name__
    Python Special Syntax 5:对象相关
    Python Special Syntax 4:序列相关
    Python Special Syntax 3:删除对象和dir函数
    Python import与from import的区别
    Python Special Syntax 2:天才级的文档互动DocString
    Python Special Syntax 1: Python的局部变量和全局变量
    Python抓取页面乱码问题的解决
    win10居然把Linux的引导覆盖了
  • 原文地址:https://www.cnblogs.com/baorantHome/p/15778924.html
Copyright © 2011-2022 走看看