volatile

volatile关键字的主要作用是使变量在多个线程间可见

使用方法:

private volatile int number=0;

图示:

两个线程t1和t2共享一份数据,int a=0,但是两个线程间是不可见的,t1修改a=10,但对于t2来说a还是从0变到20,两个线程是独立的,不可见的;

我想做的是a如果变化了,t1和t2实时的知道a变化了,即a不是从0变到20,而是从10变到20;即t1对a发生修改,t2实时知道a发生变化了;同理,t2中a变成20了,t1也能马上知道值变成20了;volatile关键字就能实现这个.

运行结果如下:

虽然输出了isRunning的值已经被设置成了false,但是线程仍然在运行;这是什么原因呢?

这是java  jdk的原因

java  jdk在执行一个程序时,都会分配一个单独的空间,但是在jdk1.5以后,它对每一个线程做了一个优化,对每个线程加了一块独立的运行空间,这块空间装主内存的一些引用(当前线程的一些引用变量),相当于拷贝了一份副本,线程运行时直接去副本取内容.这样做的目的是,让线程在执行时效率更高

加volatile关键字后:

这是为什么呢?

内存分析图:

volatile只具有可见性不具备原子性(原子操作是不可分割的,在执行完毕不会被任何其它任务或事件中断)

最新文章

  1. 项目游戏开发日记 No.0x000005
  2. windows下用虚拟机安装ubuntu
  3. iOS 疑难杂症 — — Swift debugger 无法在控制台 po 变量值的问题
  4. 【项目】用CIFilter得到图片没办法保存到沙盒里面,显示是CGImage为空
  5. VC单文档对话框添加托盘图标
  6. Connection failed: NT_STATUS_ACCOUNT_RESTRICTION
  7. oracle-linux下挂载"移动硬盘" NTFS类型
  8. HDU1565+状态压缩dp
  9. opencv里面CV_32FC1家族
  10. 基于Http原理实现Android的图片上传和表单提交
  11. <转>十分钟学会javascript
  12. commons.fileupload简单应用
  13. ssh登录命令(转)
  14. Android:关于背景选择器Selector的item顺序
  15. 【原创】Ajax的用法总结
  16. OC的内存管理和@class
  17. JavaScript 实现命名空间(namespace)的最佳方案——兼容主流的定义类(class)的方法,兼容所有浏览器,支持用JSDuck生成文档
  18. poj3185 高斯消元
  19. Spring Boot之WebSocket
  20. W3C的标准到底是啥?

热门文章

  1. PHP 可变参数
  2. redis复制机制
  3. 【LEETCODE】43、1002. Find Common Characters
  4. Maven过滤属性文件,替换属性值
  5. 解决SecureCRT 中文乱码??
  6. jQuery中的 AJAX
  7. 多个echarts图自适应屏幕大小
  8. [AIR] NativeExtension在IOS下的开发实例 --- 新建项目测试ANE(四)
  9. 在SAP Hybris commerce Storefront里购物下单
  10. Android查看应用方法数