博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
happen-before 原则详解
阅读量:3578 次
发布时间:2019-05-20

本文共 651 字,大约阅读时间需要 2 分钟。

1.happen-before 原则是什么?

happen-before 原则是作为java 内存模型(JMM)的一部分。它规定了若A操作happen-befroe B操作,那么A操作对与B操作来说是可见的。JVM在实现的时候就确保了是能够满足happen-before 原则的。

2.为什么会出现happen-before 原则?

  • java 存在线程工作内存及主内存(多核cpu及多级缓存导致),线程对变量的操作都是在工作内存中进行的,那么多线程的操作必然会导致共享数据的错乱
  • 操作系统会对指令进行重排序,在多线程环境下,重排序对会线程的执行结果及执行顺序造成严重的影响

通过对happen-before原则的定义,可以满足多线程环境下,程序能正常安装我们预想的路径进行执行,满足我们预想的结果。

3.JVM 依靠什么来实现happen-before 原则呢?

主要是依靠内存屏障。

3.happen-before 原则的具体内容

  • 程序次序规则

不能简单滴认为,写在前面的代码就先于后面的代码先执行,这个规则,一般需要与其他规则配合起来。

一般值指的是的真正指令执行顺序若A happen-before B

  • voliate 的写happen-before 读
  • 传递性原则
  • 线程start 原则

主线程start 子线程。则主线程的操作对于子线程是可见的

  • 线程join原则
  • 线程interupt原则
  • synchronized 原则

同一个锁的unlock操作happen-before此锁的lock操作

转载地址:http://jhagj.baihongyu.com/

你可能感兴趣的文章
数据结构之列表
查看>>
es5中的arguments对象
查看>>
git本地仓库和远程仓库关联,分支重命名
查看>>
js对象的深拷贝,你真的觉得很简单吗?
查看>>
你真的了解map方法吗?手动实现数组map方法。
查看>>
带你手动实现call方法,让你收获满满
查看>>
前端知识体系
查看>>
使用join查询方式找出没有分类的电影id以及名称
查看>>
Qt教程(2) : Qt元对象系统
查看>>
驱动开发误用指针错误:Unable to handle kernel NULL pointer dereference at virtual address
查看>>
Linux部署DocSystem知识/文件管理系统
查看>>
Centos7开机自启动脚本无法使用备用方案
查看>>
jvm虚拟机内存详解
查看>>
线程的创建方式
查看>>
DNS是什么
查看>>
Hbase架构
查看>>
PaddleX的C++使用
查看>>
MyBatis-Plus代码生成器
查看>>
我的第一个SpringBoot项目(一)
查看>>
回文数
查看>>