Synchronize 和 volitile 的区别(1)
来源:互联网 发布:万网域名转入 编辑:程序博客网 时间:2024/05/21 06:43
Synchronize
1,在同一对象锁或者同一对象监视器(Object Monster)上的同步
2,保证了不同线程对共享变量操作结果的可见性
volitile
Thread 1 负责对共享变量的写write
Thread 2~n 负责Read
volitile是不能保证线程对共享资源获取是同步的,volitile只能保证被修改的数据
不会存在于cpu的缓存中,而是直接刷新回内存,这样可以保证所有对资源共享的线程
都是从内存中直接读取相同的数据,而就不存在一部分线程读内存中的数据而另外一部
分读缓存中的数据,造成数据的可视性不一致了。使用volitile和非volitile修饰的变
量同样是不存在粒子性的,其自加和自减操作在jvm的实现中都是分多步进行的,
1、gefiled,2、将域值放入栈帧的局部变量区,3、将局部变量区的数据取得后放入操
作数栈进行运算4、计算完成返回结果后再putfield。这样在多线程中对共享资源的同步
使用volitile同样是非线程安全的。对共享资源同步的保险方法是使用synchronized方
法,每个对象只有一个对象锁,jvm负责监控对象锁,当对象锁被某个线程取得时,
jvm对对象锁的计数变为1,此时jvm将不会允许其它线程获得此对象的对象锁。将共享资
源的运算以及获取放入synchronized方法中,同时将共享资源修饰为volitile,这样就
可以做到双保险了。Synchronized修饰的方法是隐式的锁技术,可以使用Lock进行细粒
度的锁控制,在Lock对象未调用unlock方法之前,非持有对象锁的进程均无法进入Lock
.lock()…………Lock.unlock()这块区域。
- Synchronize 和 volitile 的区别(1)
- synchronized和lock,volitile区别
- Synchronize 和 Lock 的区别与用法
- Synchronize 、 Lock和volatile的区别
- 【心得】并发(synchronize)和并行的区别
- Synchronize,Lock和volatile的区别
- java 中volatile和synchronize的区别和比较
- 深入研究 Java Synchronize 和 Lock 的区别与用法
- Java Synchronize 和 Lock 的区别与用法
- 深入研究 Java Synchronize 和 Lock 的区别与用法
- 深入研究 Java Synchronize 和 Lock 的区别与用法
- java 深入研究Synchronize 和 Lock 的区别与用法
- 深入研究 Java Synchronize 和 Lock 的区别与用法
- 深入研究 Java Synchronize 和 Lock 的区别与用法
- 深入研究 Java Synchronize 和 Lock 的区别与用法
- 深入研究 Java Synchronize 和 Lock 的区别与用法
- 深入研究 Java Synchronize 和 Lock 的区别与用法
- 深入研究 Java Synchronize 和 Lock 的区别与用法
- Create Maximum Number
- Error: could not open `javaROOT_PATH\lib\amd64\jvm.cfg';
- Vim不常见但是很实用的命令技巧
- 本地代码托管到GitHub--Android菜鸟的成长日记
- 自己写的Cglib动态代理的例子
- Synchronize 和 volitile 的区别(1)
- nginx
- 第四次作业
- 为您解惑:JS模块与命名空间的介绍........
- [普及] NOIP 2014 子矩阵
- HDU 4003 Find Metal Mineral 树上分组背包
- TabLayout的使用及封装
- 22、Java入门—反射之获取获取成员变量和构造函数的信息
- excel+unittest