volatile关键字:

1)能够保证volatile变量的可见性

2)不能保证volatile变量复杂操作的原子性。

volatile如何实现内存可见性:

深入来说:通过加入内存屏障和禁止重排序优化来实现的。

1)对volatile变量执行写操作时,会在写操作后加入一条store屏障指令

2)对volatile变量执行读操作时,会在读操作前加入一条load屏障执行

通俗来讲:volatile变量在每次被线程访问时,都强迫从主内存中重读该变量的值,而当该变量发生变化时,又会强迫线程将最新的值刷新到主内存。

这样任何时刻,不同的线程总能看到该变量的最新值。

线程写volatile变量的过程:

1,改变线程工作内存中volatile变量副本的值

2,将改变后的副本从工作内存刷新到主内存。

线程读volatile变量过程:

1)从主内存读取volatile变量的最新值到线程工作内存中

2)从工作内存读取volatile变量的副本

volatile不能保证volatile变量符合操作的原子性:

pirvate int number=0;

number++;  不是原子操作

更多相关文章

  1. 关于Javascript中声明变量、函数的笔记
  2. Servlet也是一个Java类.为什么我不可以将Serlvet中的变量传递出

随机推荐

  1. Activity 模版样式简介
  2. Android中ExpandableListView的使用
  3. android 对话框(Dialog)使用
  4. Android Sensor Shake(WeChat)
  5. 分享七个非常有用的Android开发工具和工
  6. Android RIL总体架构介绍
  7. 图片走廊
  8. Mac Android Studio获取数字签名的方法
  9. Mac版Android studio中使用lambda表达式
  10. Android问题:com.android.builder.packagi