Java中 Happen-before 规则总结

2023-11-14

详细见:http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/package-summary.html

比较重要的几条

1)Actions prior to "releasing" synchronizer methods such as Lock.unlock,Semaphore.release, and CountDownLatch.countDown happen-before actions subsequent to a successful "acquiring" method such asLock.lock, Semaphore.acquire, Condition.await, andCountDownLatch.await on the same synchronizer object in another thread

2)  A write to a volatile field happens-before every subsequent read of that same field. Writes and reads ofvolatile fields have similar memory consistency effects as entering and exiting monitors, but donot entail mutual exclusion locking. 

3)  Actions in a thread prior to placing an object into any concurrent collectionhappen-before actions subsequent to the access or removal of that element from the collection in another thread. 


volatile变量和concurrent容器不仅是关于它们自身内容的,还可以用来当同步器,影响别的变量。

线程1							线程2
	p1:a = 1			
	p2:list.set(1,"t")// volatileFlag = true		
							p3:list.get(2) // if(volatile_flag == true)
							p4:int b = a;
p2 和 p3处分别用一个volatile变量写(或concurrent容器的写)和volatile变量读(或concurrent容器读),就可以确保,如果是上图的执行轨迹,b是可以读到a的新值的。如果p2,p3出用普通容器或着非volatile变量,则即使p2先于p3执行,b也不一定得到a的新值。
concurrent包中的容器,一般put,add是进行了lock的,而get一般没有,为了保证规则3),一般会在put方法的最后写一个volatile变量,而在get方法的开始读取这个volatile变量,如下图的 put的2) 和get的3)。


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java中 Happen-before 规则总结 的相关文章

  • pyspark_自定义udf_解析json列【附代码】

    pyspark 自定义udf 解析json列 附代码 一 背景 二 调研方案 三 利用Pyspark udf自定义函数实现大数据并行计算 整体流程 案例代码运行结果 案例代码 代码地址 代码 一 背景 车联网数据有很多车的时序数据 现有一套

随机推荐

  • GITHUB实用有趣工具推荐

    1 algorithm visualizer 一个交互式的在线可视化学习算法平台 能在可视化区域看到每行代码执行对应的操作 并且有对应的动画呈现 使你更加容易理解算法 2 pcottle learnGitBranching 一个在线可视化交
  • python能做什么毕业设计-有没有适合python做的毕设题目,现在不知道做什么了?...

    对于这个问题有三个解决方案 1 自己开发 2 借助开源项目 3 付费开发 结合自身的能力和需求 大家可以自行寻找合适的解决方案 1 自己开发 难度 高 实用性 低 价格 免费 Python 是一门非常好入门的语言 普通人跟着一门教程认真学
  • jenkins部署 java项目到远程 windows服务器

    jenkins部署 java项目到远程 windows服务器 1 查看windows服务器是否有 ssh服务 cmd模式 输入 ssh 如果报错就去安装ssh 可以去下 openSSH 2 然后直接用自己的电脑就是客户端 用xshell 连
  • 79. Word Search

    Given a 2D board and a word find if the word exists in the grid The word can be constructed from letters of sequentially
  • 蓦然回首 灯火阑珊

    时间的沙漏沉淀着无法逃离的过往 记忆的双手总是拾起那些明媚的忧伤 雨声 划破伤痛的记忆 泪水 激起心中的波浪 你的一闪而过 让我记住这永恒的瞬间 你在我生命中留下不褪色的光芒 就如流星的坠落绚丽地点亮了整个星空 很幸运 就像是个命运的宠儿
  • Bootloader

    Bootloader 一段有下载和引导功能的程序 下载应用程序 引导使MCU运行在应用程序中 只在有更新请求或者APP无效的时候才会激活 APP和Bootloader都存在Flash中 Flash Driver用来擦除APP 下载临时存放在
  • 力扣2596. 检查骑士巡视方案

    题目描述 骑士在一张 n x n 的棋盘上巡视 在 有效 的巡视方案中 骑士会从棋盘的 左上角 出发 并且访问棋盘上的每个格子 恰好一次 给你一个 n x n 的整数矩阵 grid 由范围 0 n n 1 内的不同整数组成 其中 grid
  • latent-diffusion model环境配置,这可能是你能够找到的最细的博客了

    文章目录 前言 一 环境配置 1 创建requirement txt文件 2 提前从Github上下载好taming transformers和clip 3 创建conda环境 并安装requirement txt文件 4 安装torch
  • oracle sql model,SQL语句中的model用法

    事情起因 今天看到一条非常 稀奇古怪 的SQL select语句中 在表后面跟了一大窜以model开头的东东 后来查一下资料 原来model在数据仓库中是比较有地位的 列一下几个简单的测试 more 1 测试表中数据 SQL gt sele
  • 使用阿里PAI DSW部署Stable Diffusion WebUI

    参考内容为 快速启动Stable Diffusion WebUI 进入到网址https pai console aliyun com 里边 点击创建实例 把实例名称填写好 选择GPU规格 然后选择实例名称是ecs gn6v c8g1 2xl
  • MySqL导出表结构文档

    SELECT COLUMN NAME 列名 COLUMN COMMENT 名称 COLUMN TYPE 数据类型 DATA TYPE 字段类型 CHARACTER MAXIMUM LENGTH 长度 IS NULLABLE 是否必填 COL
  • 如何优化 API 开发?

    API 是一套规则 定义了应用程序或设备的用户友好性 它是一个软件中介 使应用程序之间可以互动 它可以是基于网络的系统 数据库系统等 像 Netflix Facebook 和 Github 这样的科技巨头在这方面处于领导地位 他们雇佣 AP
  • React-hooks面试考察知识点汇总

    Hook 简介 Hook出世之前React存在的问题 在组件之间复用状态逻辑很难 React 没有提供将可复用性行为 附加 到组件的途径 例如 把组件连接到 store 有一些解决此类问题的方案 比如 render props 和 高阶组件
  • Linux学习——动态库的创建

    Linux 创建动态库 一 动态库特点 二 生成动态库 共享库 1 生成目标文件 o 2 创建共享库 以command为例 3 给共享库创建链接 4 编译测试 5 让系统找到库的方法 1 方法二 2 方法三 一 动态库特点 二 生成动态库
  • Python爬虫教程入门(附源码)

    感谢博主分享 作者 码农BookSea 原文链接 https blog csdn net bookssea article details 107309591 讲解我们的爬虫之前 先概述关于爬虫的简单概念 毕竟是零基础教程 爬虫 网络爬虫
  • 2023年热门技术有哪些?

    2023年 哪些尖端技术领域将成为最重要的五大技术领域 接受调查的全球技术领导者表示 云计算 5G 元宇宙 电动汽车和工业物联网将是2023年最重要的五个技术领域 该研究还预测 5G技术将在明年对远程学习和教育 远程医疗和娱乐产生最大影响
  • 一种新的爬虫网络解锁器

    事出原由 遇到一个需要采集境外电商的需求 相比国内各种层出不穷的反爬手段 境外产品更注重于用户行为和指纹上 所以笔者在想是否有类似于指纹浏览器的环境可以提供给爬虫采集器使用 经过检索 找到了一种名为爬虫网络解锁器的新兴产品 爬虫网络解锁器
  • 最深情的告白——郁金香(Python实现)

    目录 1 最深情的告白 2 即兴赞之 2 1 李小白言郁金香 2 2 郁金香般的姑娘 2 3 荷兰的郁金香 3 Python代码实现 3 1 郁金香的芬芳 3 2 我俩绚丽多姿的风景 1 最深情的告白 风中雨打花瓣 打不落她那冰清玉洁的品质
  • 双波长分光光度法的原理

    1 双波长分光光度法的原理 双波长分光光度法是在传统分光光度法的基础上发展起来的 它的理论基础是差吸光度和等吸收波长 它与传统分光光度法的不同之处 在于它采用了两个不同的波长即测量波长 又叫主波长 p Primary Wavelength
  • Java中 Happen-before 规则总结

    详细见 http docs oracle com javase 7 docs api java util concurrent package summary html 比较重要的几条 1 Actions prior to releasin