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. select 查询

    使用as给字段起别名,例如:select name as 姓名 from student; 模糊匹配(like) "_":一个占位符.例子:select * from studen ...

  2. Spring生态研习【三】:Spring-kafka

    1. 基本信息介绍 基于spring的kafka应用,非常简单即可搭建起来,前提是要有一个kafka的broker集群.我在之前的博文里面已经介绍并搭建了一套broker环境,参考Kafka研究[一] ...

  3. [综] meanshift算法

    Meanshift,聚类算法 http://www.cnblogs.com/liqizhou/archive/2012/05/12/2497220.html 记得刚读研究生的时候,学习的第一个算法就是 ...

  4. Entity Framework Code first 可能会导致循环或多个级联路径.

    用code first映射数据库报错 Introducing FOREIGN KEY constraint 'FK_dbo.Roles_dbo.SubSystems_SubSystemID' on t ...

  5. Java异常学习总结二

    异常的处理方式 方式一:捕获异常(try-catch-finally) 捕获异常是通过三个关键词来实现的:try-catch-finally.用try来执行一段程序,如果出现异常,系统抛出一个异常,可 ...

  6. JQuery miniui使用小记

    1.renderer="onActionRenderer" 如我们需要在一行数据时加上删除操作时,就需要在每行上加上“删除”按钮,以下为实现代码: 列加载时主要的属性

  7. 关于CPU CACHE工作机制的学习

    转自:http://blog.csdn.net/notbaron/article/details/48143409 1.  存储层次结构 由于两个不谋而合的因素如下: l  硬件:由于不同存储技术的访 ...

  8. python导包路径的修改

    1.sys os 模块 import sys import os 2.查看默认的导包路路径: print(sys.path) 3.路径拼接 os.path.join(url, 'apps')) 4.追 ...

  9. ios7自定义返回按钮后,右滑返回功能失效解决方法

    -(void)viewWillAppear:(BOOL)animated{     [super viewWillAppear:animated];     //开启ios右滑返回     if ([ ...

  10. Dubbo注册Zookepper服务的虚拟IP

    使用dubbo在zookepper上注册服务,使用dubbo的服务器IP为192.168.70.105 而在zookepper上显示服务提供者为 dubbo://202.102.110.203:808 ...