// Not quite a no-op; ensures volatile write semantics怎么理解

  • 只解释一句

自学源码,看到CopyOnWriteArrayList 类里面有这样一条:
一开始觉得很奇怪:

public E set(int index, E element) {final ReentrantLock lock = this.lock;lock.lock();try {Object[] elements = getArray();E oldValue = get(elements, index);if (oldValue != element) {int len = elements.length;Object[] newElements = Arrays.copyOf(elements, len);newElements[index] = element;setArray(newElements);} else {// Not quite a no-op; ensures volatile write semanticssetArray(elements);}return oldValue;} finally {lock.unlock();}}

中间有一段:

            } else {// Not quite a no-op; ensures volatile write semanticssetArray(elements);}

只解释一句

为了刷新数据。你细品。

网上查的话,查到一些术语,比如“happens-before”,比较晦涩。
但我转念一想。

    /** The array, accessed only via getArray/setArray. */private transient volatile Object[] array;

volatile情景总结一句话就是:几个线程,一个共享数据,其中一个线程动了数据,其余线程能实时更新。

实现的基础是:根据“MESI缓存一致性协议”以及涉及的“总线嗅探原理”。

所以,你就算操作后的值和操作前的值一样,也要做一下

// Not quite a no-op; ensures volatile write semantics怎么理解相关推荐

  1. Not quite a no-op; ensures volatile write semantics

    来源 看java并发编程之美P110提到: 如果指定位置的元素值与新值一样,则为了保证volatile语义,还是需要重新设置array,虽然array的内容并没有改变. 这里只是提到保证volatil ...

  2. 对Java单例模式 volatile关键字作用的理解

    单例模式是程序设计中经常用到的,简单便捷的设计模式,也是很多程序猿对设计模式入门的第一节课.其中最经典的一种写法是: class Singleton {private volatile static ...

  3. 嵌入式开发中对(*(volatile unsigned long *)) 的理解

    一.说明 (*(volatile unsigned long *)) 这个语句对于不同的计算机体系结构,设备可能是端口映射,也可能是内存映射的.如果系统结构支持独立的IO地址空间,并且是端口映射,就必 ...

  4. #define GPBCON (*(volatile unsigned *)0x56000010) 的理解

    2019独角兽企业重金招聘Python工程师标准>>> 对于不同的计算机体系结构,设备可能是端口映射,也可能是内存映射的.如果系统结构支持独立的IO地址空间,并且是端口映射,就必须使 ...

  5. Java CopyOnWriteArrayList

    Copy-On-Write简称COW,是一种用于程序设计中的优化策略.其基本思路是,从一开始大家都在共享同一个内容,当某个人想要修改这个内容的时候,才会真正把内容Copy出去形成一个新的内容然后再改, ...

  6. CopyOnWriteArrayList简介

    CopyOnWriteArrayList,写数组的拷贝,支持高效率并发且是线程安全的,读操作无锁的ArrayList.所有可变操作都是通过对底层数组进行一次新的复制来实现. CopyOnWriteAr ...

  7. happens-before俗解

    学习Java并发,到后面总会接触到happens-before偏序关系.初接触玩意儿简直就是不知所云,下面是经过一段时间折腾后个人对此的一点浅薄理解,希望对初接触的人有帮助.如有不正确之处,欢迎指正. ...

  8. java并发编程之美-阅读记录5

    java并发包中的并发List 5.1CopeOnWriteArrayList 并发包中的并发List只有CopyOnWriteArrayList,该类是一个线程安全的arraylist,对其进行的修 ...

  9. happens-before通俗理解

    原文地址:http://ifeve.com/easy-happens-before/ 学习Java并发,到后面总会接触到happens-before偏序关系.初接触玩意儿简直就是不知所云,下面是经过一 ...

最新文章

  1. 【Android UI设计与开发】第13期:顶部标题栏(四)自定义ActionBar风格和样式
  2. 无法想mysql进行插入_mysql 无法插入中文
  3. 高可用系统设计 | 分布式限流策略:计数器算法、漏桶算法、令牌桶算法
  4. 一套完整的java程序_编写一个完整的Java Application 程序
  5. NavMeshAgent 动态加载障碍物
  6. 函数fun的功能是将s所指字符串_21 函数的简介
  7. WinCE6.0+ S3C6410 IIC驱动源码学习
  8. 调查:2013年十大急需的热门IT技能
  9. ShellServiceObjectDelayLoad注册表键值作用
  10. 微信小程序上线审核流程
  11. Java 创建并应用PPT幻灯片母版
  12. dnspod动态解析linux,NAS折腾记 篇一:五分钟搞定威联通DNSPOD动态域名解析-简单教程+问题解决...
  13. 【ArcGIS|空间分析】选址分析(为学校选址)
  14. 自动化测试工程师,自动化测试项目老是误报?怎么解决?(详细总结)
  15. Tiki靶机(CMS漏洞)
  16. svchost.exe不停下载
  17. 微信表情符号写入案件判决
  18. JAVA表达爱意_520表白日;程序员不会说爱?来一种属于程序员的满满爱意
  19. EMV中易混淆概念总结
  20. Charles抓包使用

热门文章

  1. 身份证号与统一社会信用代码的校验
  2. pytorch——多GPU训练,CPU测试出现的问题
  3. Linux编程:命令行选项单横线“-”与双横线“--”的区别
  4. 暴雪战网协议更新:代练及第三方交易均违规
  5. 研发行业防泄密的特点需求
  6. EXT各个控件隐藏不可编辑等操作以及一些控件操作
  7. c语言结构体成员变量私有化,C语言中结构体变量私有化详解
  8. 禁用免费版小红伞的弹窗广告
  9. 电脑显示OSD锁定怎么解锁?
  10. 20M的Wi-Fi能用百兆宽带?给大家科普下