1.7volatile关键字
2024-10-20 20:58:59
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只具有可见性不具备原子性(原子操作是不可分割的,在执行完毕不会被任何其它任务或事件中断)
最新文章
- 项目游戏开发日记 No.0x000005
- windows下用虚拟机安装ubuntu
- iOS 疑难杂症 — — Swift debugger 无法在控制台 po 变量值的问题
- 【项目】用CIFilter得到图片没办法保存到沙盒里面,显示是CGImage为空
- VC单文档对话框添加托盘图标
- Connection failed: NT_STATUS_ACCOUNT_RESTRICTION
- oracle-linux下挂载";移动硬盘"; NTFS类型
- HDU1565+状态压缩dp
- opencv里面CV_32FC1家族
- 基于Http原理实现Android的图片上传和表单提交
- <;转>;十分钟学会javascript
- commons.fileupload简单应用
- ssh登录命令(转)
- Android:关于背景选择器Selector的item顺序
- 【原创】Ajax的用法总结
- OC的内存管理和@class
- JavaScript 实现命名空间(namespace)的最佳方案——兼容主流的定义类(class)的方法,兼容所有浏览器,支持用JSDuck生成文档
- poj3185 高斯消元
- Spring Boot之WebSocket
- W3C的标准到底是啥?