java的volatile关键字(笔记)
2024-08-24 22:56:54
Volatile修饰的成员变量在每次被线程访问时,都强迫从主内存中重读该成员变量的值。而且,当成员变量发生变化时,强迫线程将变化值回写到主内存。这样在任何时刻,两个不同的线程总是看到某个成员变量的同一个值。
Java语言规范中指出:为了获得最佳速度,允许线程保存共享成员变量的私有拷贝,而且只当线程进入或者离开同步代码块时才与共享成员变量的原始值对比。
这样当多个线程同时与某个对象交互时,就必须要注意到要让线程及时的得到共享成员变量的变化。
而volatile关键字就是提示VM:对于这个成员变量不能保存它的私有拷贝,而应直接与共享成员变量交互。
使用建议:在两个或者更多的线程访问的成员变量上使用volatile。当要访问的变量已在synchronized代码块中,或者为常量时,不必使用。
由于使用volatile屏蔽掉了VM中必要的代码优化,所以在效率上比较低,因此一定在必要时才使用此关键字。
synchronized
同步块大家都比较熟悉,通过 synchronized 关键字来实现,所有加上synchronized 和 块语句,在多线程访问的时候,同一时刻只能有一个线程能够用
synchronized 修饰的方法 或者 代码块。
最新文章
- Python-函数的返回值
- SSLv3 Poodle攻击漏洞检测工具
- KB奇遇记(9):艰难的上线
- 关于CSS定位属性 position 的使用
- AIOps 一场颠覆传统运维的盛筵
- mysql sysbench基准测试
- Centos的yum源更换为国内的阿里云源
- golang gui library 库
- HTML5 <;li>; <;ol>; <;ul>; 用法
- Uva 10635 - Prince and Princess 问题转化,元素互不相同(在自身序列中独特)的两个数列的LCS,LIS 难度: 2
- python检测网络延迟
- (转)【多媒体封装格式详解】--- AAC ADTS格式分析
- mybatis-plus之Mapper CRUD接口和 Service CRUD 接口
- linux提权 searchsploit 使用规范
- jquery-easyui 中表格的行编辑功能
- 大坑!有网,电脑qq登不上去!!
- Wamp设置虚拟目录
- PgSql备份pg_dump与还原手记pg_restore(转)
- [原创]OpenERP 7.0 打印PDF报表 中文 乱码问题的解决方案。
- [Spring Data MongoDB]学习笔记--注册一个Mongo实例
热门文章
- AI算法测评事项
- 十八般武艺玩转GaussDB(DWS)性能调优:SQL改写
- PHP 自定义 alert 跳转方法
- HarmonyOS三方件开发指南(4)——Logger组件
- 【C++】《C++ Primer 》第九章
- GCC 概述:C 语言编译过程详解
- 相同的class的各位object互为友元(friend)
- 【Git】5、Git如何提交代码到远程仓库
- 【MySQL】DDL数据定义语言的基本用法create、drop和alter(增删改)
- 【ORA】ORA-27090: Unable to reserve kernel resources for asynchronous disk I/O