首先看下如下代码:

指令重排序和优化后代码如下:
if(!stop)
while(true){}
volatile最适合使用的是一个线程写、其他线程读的场合,如果有多个线程并发写操作,仍然需要使用锁或者线程安全的容器或者原子变量来代替。

当一个变量被volatile修饰后,它将具备以下两种特性。
· 线程可见性:当一个线程修改了被volatile修饰的变量后,无论是否加锁,其他线程都可以立即看到最新的修改,而普通变量却做不到这点。
禁止指令重排序优化,普通的变量仅仅保证在该方法的执行过程中所有依赖赋值结果的地方都能获取正确的结果,而不能保证变量赋值操作的顺序与程序代码的执行顺序一致。

最新文章

  1. js计算地球两个经纬度之间的距离
  2. iphone状态栏高度?
  3. Search Insert Position
  4. Ubuntu,QT5连接MySQL
  5. Visual Studio Online Integrations-Collaboration
  6. PBOC2.0与3.0的区别
  7. 20种常用的DOS命令小结
  8. Visual Studio快捷键小结
  9. objectivc-c---block
  10. 字符串查找KMP算法(转)
  11. ajax 假上传文件
  12. IDL 的读写
  13. Centos 7.0 zabbix 部署
  14. 近期学习docker遇到的一些问题
  15. ES6+Vue+webpack项目,在ie11中请求后台接口后数据更新,但是页面没有刷新?
  16. DB2(Procedure)存储过程遍历循环!
  17. numpy高级索引
  18. ES6 class的基本语法-学习笔记
  19. Android_OnLowMemory和OnTrimMemory
  20. LUA返回的是引用

热门文章

  1. 小程序 之picker-view省市县
  2. BZOJ 2894: 世界线 广义后缀自动机
  3. API开发管理平台eoLinker AMS 4.1版本发布:加入聚合空间,发布AMS专业版等
  4. koji
  5. 洛谷——P3205 [HNOI2010]合唱队
  6. BZOJ 4327 [JSOI2012]玄武密码 (AC自动机)
  7. 【ACM】hdu_1808_Halloween treats_201308132022
  8. spring历史背景
  9. jq 轮播图 上下自动滚动
  10. JEval使用实例