Java并发-Java并发机制的底层实现原理
2017-04-29 17:07
736 查看
Java代码在编译后编程Java字节码,字节码被类加载器加载到JVM里,JVM执行字节码,最终需要转化为汇编指令在CPU上执行,Java中所使用的并发机制依赖于JVM的实现和CPU的指令。
CPU术语
为了提高处理速度,处理器不直接和内存进行通信,而是先将系统内存的数据读到内部缓存(L1,L2或者其他)后,再进行操作,
但操作完你知道何时会写到内存。如果对声明了volatile的变量进行写操作,JVM就会想处理器发送一条Lock前缀的执行,
将这个变量所在缓存航的数据街回到系统内存。但是就算是写回到内存,如果其他处理器缓存的值是旧的,再执行计算操作就会有问题。
所以,在多处理器下,当处理器发现自己缓存行对应的内存地址被修改,就会将当前处理器的缓存航设置为无效。
当处理器对这个数据进行修改操作的时候,会重新从系统内存中吧数据读到处理器缓存里面。
对于普通同步方法,锁是当前实例对象。
对于静态同步方法,锁是当前类的Class对象。
对于同步方法快,锁是Synchonronized括号里面的内置对象。
当一个线程试图访问同步代码块时,它首先必须得到锁,退出或跑出异常时必须释放锁。
一、volatile的应用
在多线程并发编程中synchronized和volatile都扮演者重要的角色,volatile是轻量级的synchronized,它在多处理器开发中保证了共享变量的“可见性”。“可见性”指的是当一个线程修改一个共享变量时,另外一个线程能读到这个修改的值。如果volatile变量修饰符使用恰当的话,它比synchronized的使用和执行成本更低,因为他不会引起线程上下文的切换和调度。本文将深入分析在硬件层面上Intel处理器是如何实现volatile的,通过深度分析帮助我们正确地使用volatile变量。1.1volatile的定义与实现原理
Java编程语言允许线程访问共享变量,为了能确保共享变量能被准确和一致地更新,线程应该确保通过拍他所单独获得这个变量。Java语言提供了volatile,在某些情况下比锁要更加方便。如果一个字段被声明称volatile, Java线程内存模型确保所有线程看到这个变量的值是一致的。CPU术语
为了提高处理速度,处理器不直接和内存进行通信,而是先将系统内存的数据读到内部缓存(L1,L2或者其他)后,再进行操作,
但操作完你知道何时会写到内存。如果对声明了volatile的变量进行写操作,JVM就会想处理器发送一条Lock前缀的执行,
将这个变量所在缓存航的数据街回到系统内存。但是就算是写回到内存,如果其他处理器缓存的值是旧的,再执行计算操作就会有问题。
所以,在多处理器下,当处理器发现自己缓存行对应的内存地址被修改,就会将当前处理器的缓存航设置为无效。
当处理器对这个数据进行修改操作的时候,会重新从系统内存中吧数据读到处理器缓存里面。
Synchronized的实现原理和应用
Java中的每一个对象都可以作为锁。具体表现有以下三种形式。对于普通同步方法,锁是当前实例对象。
对于静态同步方法,锁是当前类的Class对象。
对于同步方法快,锁是Synchonronized括号里面的内置对象。
当一个线程试图访问同步代码块时,它首先必须得到锁,退出或跑出异常时必须释放锁。
相关文章推荐
- java并发机制的底层实现原理
- Java并发机制的底层实现原理(二)
- java并发机制的底层实现原理
- Java并发机制的底层实现原理
- Java并发编程(二): Java并发机制的底层实现原理
- 二、Java并发机制的底层实现原理
- java并发编程的艺术【二】java并发机制的底层实现原理
- 《并发编程的艺术》读书笔记-第2章java并发机制的底层实现原理
- 程序猿大牛:分享JAVA并发机制的底层实现原理详解(附电子书籍)
- Java并发机制和底层实现原理
- JAVA并发机制的底层实现原理
- Java并发机制底层——原子操作的实现原理
- java并发机制的底层实现原理
- [jjzhu学java之多线程笔记]java并发机制的底层实现原理
- 《Java并发编程的艺术》笔记二——Java并发机制的底层实现原理.md
- 【读书笔记】Java并发机制的底层实现原理
- 2、Java并发机制的底层实现原理
- Java并发编程的艺术--第二章<Java并发机制的底层实现原理>
- Java并发机制底层——Volatile的实现原理
- 深入学习Java多线程——并发机制底层实现原理