Java并发机制深究1-synchronized和volatile
来源:互联网 发布:阿里云 网站 编辑:程序博客网 时间:2024/05/16 13:59
在多线程并发编程中,synchronized和volatile都是很重要的,volatile是轻量级的synchronized。在多处理器编程中保证共享变量的统一性。
1.volatile的使用和原理
如果一个变量被声明为volatile,java线程内存模型确保所有线程中得到变量的值是一致的。
在对volatile修饰的变量进行赋值操作时会引发两个操作:
<1> 把当前处理器缓冲行中的数据写入内存;
<2> 写回内存的操作会使其他cpu中缓存的数据无效。
2.synchronized的原理
Java中的每一个对象都可以作为锁,具体表现为:
<1> 对于普通同步方法,锁是当前实例对象;
<2> 对于静态同步方法,锁是当前class对象;
<3> 对于同步代码块,锁是synchronized括号里配置的对象;
从jvm规范中可以看出synchronized的实现原理,jvm是根据monitor对象来实现的。代码块同步是根据monitorenter和monitorexit指令实现的。
monitorenter指令在编译后插入到同步代码块的开始位置,而monitorexit是插入到代码块的结束和异常处,jvm要保证monitorenter和monitorexit进行配对。当线程执行到monitorenter指令时,获取对象所对应的monitor的所有权,获得对象的锁,此时其他线程访问此对象就处于阻塞状态。当执行到monitorexit时,线程会释放掉锁。
0 0
- Java并发机制深究1-synchronized和volatile
- java并发编程之1——synchronized和volatile
- Java并发基础(四)-volatile和synchronized
- java 并发之synchronized、volatile
- Java 并发---解读volatile synchronized
- java并发包学习系列:synchronized和volatile
- Java并发同步之synchronized与volatile
- 【并发】Volatile和synchronized的实现原理
- java中的volatile和synchronized
- Java中的volatile和synchronized
- Java volatile和synchronized 区别
- java中的volatile和synchronized
- java中的volatile和synchronized
- java 关键字synchronized和volatile
- java中的volatile和synchronized
- java中的volatile和synchronized
- Java多线程volatile和synchronized
- java中的volatile和synchronized
- javascript需要知道的1
- 解析js中的call
- javascript的几种继承方式
- Linux-进程管理
- 归并排序
- Java并发机制深究1-synchronized和volatile
- [置顶]AutoFac使用
- 【DirectX11】第七篇 光照模型——环境光
- Ubuntu快捷键——终端
- C---int和指针转换注意事项
- Saruman's Army
- FFmpeg-利用ffplay.c保存视频解码后的数据yuv420
- ubuntu下安装docker遇到的坑
- jquery提交表单报错 Uncaught TypeError: s[y] is not a function