volidate 学习

一:Volatile 变量具有synchronized的可见性,有序性 特性,但是不具备原子特性
二:java memory model(jmm) java 内存模型形象理解见下图

Java Memory Model

     a:java 线程读取共享内存变量流程:
     线程2 --> JMM 读取共享内存变量---> 放到本线程2工作内存中---> 线程2读取工作内存中的变量进行使用。
     b:java 线程修改共享内存变量流程:
     线程2--> 修改本线程工作内存中的变量-->jmm 自动把线程2的工作内存中的 修改过的 共享变量读取出来
     去同步共享内存变量(备注:1.同时会通知其他线程共享内存变量已经改变,2: 其他线程中工作内存的共享变量失效。也就是说线程1 要使用共享变量,必须重新读取 共享内存变量到 本地工作内存)
    c: 总结线程使用并修改共享内存变量流程:
    读取(共享变量)-->操作(+-*% 共享变量)-->同步(共享变量)
   
   三: volidate 关键字的作用:
   读取(共享变量)-->操作(+-*% 共享变量)-->加锁-->同步(共享变量)
   备注: jmm 根据线程2的工作内存 中的共享变量  去  同步  共享内存中的  共享变量之前加了一把锁。
   这个动作之前,线程1可以对 自己工作内存中的共享变量 修改,但jmm 要去同步线程2对共享内存修改的时刻,
   通知线程1中的 本地内存 共享变量  失效, 导致线程1 对本地工作内存 中的变量修改失效。这种情形就是 非原
  子性操作了。

   这个作者写的更加详细:
    volidate 解析

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。