java多线程内存管理以及可见性
来源:互联网 发布:软件测试和程序员 编辑:程序博客网 时间:2024/05/19 21:03
JMM(java内存模型) 描述Java程序中各种内存(线程共享变量)的访问规则。所有变量都存在于主内存中,每个线程都有自己独立的工作内存,线程间不可以直接互相操作其工作内存中的变量,以及主内存的变量,只能以主内存为媒介做改变。
多线程的可见性实现有两种方式:(其实finally也算一种)
1,通过synchronized实现,synchronized(属性的意思:1,给线程加锁2,实现可见性)
synchronize是通过:获取互斥锁->清空工作区内存->从主内存copy值到工作内存->执行代码->把值放回主内存->释放互斥锁
重排序的概念:编译器或者处理器为了提高程序性能而对代码编译时进行重新的排序,可能会导致代码真正的执行顺序与书写顺序不一样。
as-if-serial 的意思是在单线程下无论程序怎样重排序其执行结果永远一致,故不会带来内存可见性问题, 多线程可能不遵循此定律,所以可能导致内存可见性问题。
2,通过volatile关键字实现:(1,实现可见性,但不可以实现原子性)
volatile是通过加入内存屏障和禁止重排序实现可见性的。比如写操作之后的store屏障命令和读操作之前的load屏障命令。
store是在写之后强制把工作内存的值刷新到主内存,(其中是用清空工作内存的值才來实现重新取值的)load相反先从主内存取到值到工作内存,然后再读。
如何实现原子性:加锁eg, synchronize或者 reentranlock
0 0
- java多线程内存管理以及可见性
- Java多线程内存可见性
- Java多线程:内存可见性
- JAVA多线程内存可见性
- java实现多线程内存可见性
- java多线程与内存可见性
- 浅谈Java多线程(内存可见性)
- JAVA多线程的内存可见性
- java多线程内存可见性分析
- Java多线程中内存的可见性
- 浅谈java多线程中的内存可见性
- java多线程可见性
- 多线程的内存可见性
- java内存可见性
- java内存可见性
- java 内存可见性
- JAVA 内存可见性
- Java多线程中的内存可见性与原子性分析
- intellij idea 2016 activation code
- 获取请求头和请求数据
- spring入门基础
- 跟我一起学C++之new、delete运算符
- 开发宝典:数据库设计技巧,你知道几个?
- java多线程内存管理以及可见性
- 关于win系统鼠标卡顿、声音卡顿问题
- 人脸检测主要介绍代码实现
- 深入理解HashMap(原理,查找,扩容)
- 实现炫酷的获取本地图片和相机拍照图片-自定义组件
- 使用word2013 写csdn博客
- 带有序号的段落换行后自动缩进问题
- Java异常处理终结篇——如何进行Java异常处理设计
- 又想起来了,写一个开心一下