1. cas算法
    1. 概要
      1. 刚开始看这本书的时候很经常看到cas算法,个人觉得cas算法在并发编程中也是挺重要的的一部分,cas是比较并交换的意思(compare and swap),campareAndSwap(int expect,int update),函数中有两个值,expect是期望值,update是更新值,用expect值去和对象中的值(假设为current),当current值相等于expect时,修改current值为update,否则,不修改,刚开始了解cas算法的时候,因为没有了解过实际的应用场景,而且使用单线程的思维方式去考虑cas算法的使用场景,十分不理解这个算法有什么用,但是当你考虑多个线程对一个共享变量进行修改时,就能发现它的好处了,举个多线程中通用的例子,100个线程对一个共享变量(初始值为0)做++操作(每个线程做一次++操作),得出结果小于100。当你使用cas算法,每个线程首先获取这个共享变量设为expect,对变量做了加1操作为update,使用cas算法修改共享变量,假设其他线程没有修改过共享变量,此时expect和共享变量值相等,cas算法将共享变量修改为update值,否则不修改共享变量,在重复如上的操作直到修改成功。
    2. cas算法原理
      1. cas算法(campare and swap)
      2. cas算法有三个核心参数
      3. 主内存中存放的v值,所有的线程共享。
      4. 线程上次从主内存中读取的v值设为a存放在线程的帧栈,每个线程私有。
      5. 需要写入内存中并改写v值得b值,也是线程对a值修改后得到的值。
      6. 在修改v值前,先用v值和a值进行对比,相等(即没有其他的线程修改主内存中的v值),设置v值为b值,否则,不修改。
    3. cas算法例子
    4. cas算法可能出现的问题
      1. aba问题:https://blog.csdn.net/u012813201/article/details/72841801
      2. 如何避免aba问题,可以通过版本号来解决aba问题
  2. volatile原理
    1. 将当前处理器缓存行的数据写回到系统内存中
    2. 这个写回内存的操作会使其他的cpu里的缓存了改内存地址的数据无效(缓存一致性协议)
    3. 一般而言,为了提高处理器速度,处理器不直接和内存进行通信,而是先将系统内存的数据读到内部缓存后在操作,但是操作完后不知道何时会写回到内存中。而使用volatile修饰的变量进行的写操作会强制的将修改写入到内存中,并且触发缓存一致性协议,每个处理器上的缓存对应的内存地址无效,强制处理器从内存中获取新的数据。
  3. 重排序
    1. 公平锁与不公平锁
    2. 重入锁
    3. 读写锁
    4. 乐观锁与悲观锁
    5. 锁的状态,
      1. 无锁
      2. 偏向锁
      3. 轻量级锁
      4. 重量级锁
  4. 原子操作类

java并发编程艺术的更多相关文章

  1. 如何评价《Java 并发编程艺术》这本书?

    对于书评这件事情,我其实是不想写的,因为每个人都有自己的一个衡量标准,每个人眼中都有自己的哈姆雷特,是好是坏每个人都褒贬不一.如果对于书中的知识你都掌握了,你只是想把它作为一种知识串联的记忆体的话,那 ...

  2. 【java并发编程艺术学习】(二)第一章 java并发编程的挑战

    章节介绍 主要介绍并发编程时间中可能遇到的问题,以及如何解决. 主要问题 1.上下文切换问题 时间片是cpu分配给每个线程的时间,时间片非常短. cpu通过时间片分配算法来循环执行任务,当前任务执行一 ...

  3. 【java并发编程艺术学习】(一)初衷、感想与笔记目录

    不忘初心,方得始终. 学习java编程这么长时间,自认为在项目功能需求开发中没啥问题,但是之前的几次面试和跟一些勤奋的或者小牛.大牛级别的人的接触中,才发现自己的无知与浅薄. 学习总得有个方向吧,现阶 ...

  4. 【java并发编程艺术学习】(三)第二章 java并发机制的底层实现原理 学习记录(一) volatile

    章节介绍 这一章节主要学习java并发机制的底层实现原理.主要学习volatile.synchronized和原子操作的实现原理.Java中的大部分容器和框架都依赖于此. Java代码 ==经过编译= ...

  5. Java并发编程艺术读书笔记

    1.多线程在CPU切换过程中,由于需要保存线程之前状态和加载新线程状态,成为上下文切换,上下文切换会造成消耗系统内存.所以,可合理控制线程数量. 如何控制: (1)使用ps -ef|grep appn ...

  6. 【java并发编程艺术学习】(五)第二章 java并发机制的底层实现原理 学习记录(三) 原子操作的实现原理学习

    章节介绍 主要包括 术语定义.处理器如何实现原子操作.Java如何实现原子操作: 原子(atomic)本意是 不能再进一步分割的最小粒子,“原子操作” 意为 不可被中断的一个或一系列操作. 术语定义 ...

  7. 【java并发编程艺术学习】(四)第二章 java并发机制的底层实现原理 学习记录(二) synchronized

    章节介绍 本章节主要学习 Java SE 1.6 中为了减少获得锁 和 释放锁 时带来的性能消耗 而引入的偏向锁 和 轻量级锁,以及锁的存储结构 和 升级过程. synchronized实现同步的基础 ...

  8. Java并发编程总结(一)Syncronized解析

    Syncronized解析 作用: )确保线程互斥的访问同步代码 )保证共享变量的修改能够及时可见 )有效解决重排序问题. 用法: )修饰普通方法(锁是当前实例对象) )修饰静态方法(锁是当前对象的C ...

  9. Java并发编程基础三板斧之Semaphore

    引言 最近可以进行个税申报了,还没有申报的同学可以赶紧去试试哦.不过我反正是从上午到下午一直都没有成功的进行申报,一进行申报 就返回"当前访问人数过多,请稍后再试".为什么有些人就 ...

随机推荐

  1. Java Collection - 001 集合的遍历

    import java.util.ArrayList; import java.util.Iterator; import java.util.List; import com.java.domain ...

  2. pyhton3.5将汉字转成二进制的方法

    直接上代码:name = "你好,中国人"byteName = bytes(name.encode("utf-8"))print(byteName)for b ...

  3. 我是一个录像机(NVR)

    我是一个网络录像机,简称NVR.我的前辈是DVR,我们的区别很简单,DVR接的是模拟摄像机,我连接的是IP摄像机. 我的前辈DVR比我辛苦,因为模拟摄像机的模拟信号连过来之后,他要进行数字化.编码压缩 ...

  4. C++Primer第五版——习题答案详解(七)

    习题答案目录:https://www.cnblogs.com/Mered1th/p/10485695.html 第8章 IO库 练习8.1 istream &iofunc(istream &a ...

  5. Java笔试面试题整理第三波

    转载至:http://blog.csdn.net/shakespeare001/article/details/51247785 作者:山代王(开心阳) 本系列整理Java相关的笔试面试知识点,其他几 ...

  6. Vue 双向数据绑定、事件介绍以及ref获取dom节点

    vue是一个MVVM的框架 M model V view MVVM  model改变会影响视图view,view改变会影响model 双向数据绑定必须在表单里面使用 //我发现在谷歌浏览器翻译后的网页 ...

  7. python中赋值,深拷贝,浅拷贝区别

    这三种 的区别就是 复制的变量 是否是原变量的引用. 赋值:只是原变量的引用. 浅拷贝和深拷贝的区别 需要通过 子元素 区分 浅拷贝:子元素的 引用相同 深拷贝:所以引用都不相同,完全复制一份 这三种 ...

  8. sizeof的用法

    因为对sizeof不是很了解,所以去查了博客啥的,发现还是有大学问的,以下对其用法进行总结. 参考:https://www.cnblogs.com/zhangyz/articles/4736758.h ...

  9. Python面向对象编程(上)

    Python不仅支持面向过程编程,同时也支持面向对象编程.面向工程就是分析解决问题所需的步骤,然后用函数把这些步骤逐一实现,使用的时候再一个个调用函数就可以.面向对象则是把解决的问题按照一定规则划分为 ...

  10. Android中五大字符串总结(String、StringBuffer、StringBuilder、Spanna

    https://www.aliyun.com/jiaocheng/2861.html?spm=5176.100033.1.35.2ed56b03CbsYFK 摘要:String.StringBuffe ...