JSR133规范学习
最近在看多线程相关的东西,通过阅读JSR133的faq来加深自己对多线程的理解,里面大部分的内容比较简单(越到后面越难),但是有的部分比较难以理解还没有完全弄懂,所以这里只记录了一下比较简单的阅读笔记,后续会慢慢的完善,有兴趣的朋友也可以去阅读下JSR133的faq或者JSR133中文版
1、介绍
JSR133规范即JavaTM内存模型与线程规范。它描述了用JavaTM语言编写的多线程程序的语义;包括多线程更新共享内存时,读操作能看到什么值的规则。因为本规范与不同的硬件架构的内存模型相似,所以,这里的语义都是指JavaTM内存模型
2、定义
- 共享变量/堆内存(Shared variables/Heap memory) :能够在线程件共享的内存成为共享内存或对内存。所有的实例字段,静态字段以及数组都存贮在对内存中。方法中的局部变量都是存贮在栈内存,不会被线程共享也不会被内存模型影响。
- 线程间的动作(Inter-thread Actions):线程间的动作是由一个线程执行,能被另一线程探测或影响的动作(action)。线程间的工作包括共享变量的读写以及同步动作,如lock或unlock某个管程,读写某个volatile变量或启动一个线程
- 程序顺序(Program Order):在一个线程执行的线程间动作中,该线程的程序顺序是一个全序,反应出的根据该线程的线程内语义,这些动作的执行顺序
- 线程内语义(Intra-thread semantics):线程内语义是基于单线程的,它定义了某个单线程内读动作能看到的值,可以完整的预测这哥线程的行为。简而言之,线程内语义决定这某个孤立线程的执行过程(一般是根据代码的编写顺序执行);当从堆中读取值时,值是由内存模型决定的
- 同步动作(Synchronization Actions):同步动作包括锁、解锁、读写volatile变量,用于启动线程的动作以及用于探测线程是否结束的动作
- 同步顺序(Synchronization Order):每个执行过程都有一个同步顺序。同步顺序是一次执行过程中的所有同步动作上的全序关系
- Happens-Before 与 Synchronizes-With 边缘(Happens-Before and Synchronizes-With Edges):同步动作也包括 happens-before 边缘。我们称结果导向的边缘(resulting directededges)为 synchronized-with 边缘,它的定义如下:
- 某个线程中的每个动作都happens-before该线程中该动作后续的动作
- 某个管程上unlock动作都happens-before统一管程上后续的lock动作
- 对某个volatile修饰的子字段的写操作happens-before每个后续对该volatile字段的读操作
- 在某个线程对象上调用start()方法happens-before该启动了的线程的任意动作
- 某个线程上的任意动作happens-before任意其他线程从该线程对象啥会给你的join()中返回
- 如果耨个动作a happens-before 动作b,动作bhappens-before 动作c,那么动作a happens-before动作
JSR133规范学习的更多相关文章
- Java内存模型-jsr133规范介绍
原文地址:http://www.cnblogs.com/aigongsi/archive/2012/04/26/2470296.html; 近期在看<深入理解Java虚拟机:JVM高级特性与最佳 ...
- Java内存模型-jsr133规范介绍(转)
最近在看<深入理解Java虚拟机:JVM高级特性与最佳实践>讲到了线程相关的细节知识,里面讲述了关于java内存模型,也就是jsr 133定义的规范. 系统的看了jsr 133规范的前面几 ...
- 公司C++规范学习
目录 公司C++规范学习 语法部分 风格/约定 公司C++规范学习 语法部分 class和struct关键字的选择:class表示被封装的用户自定义类型,不公开定义非静态数据成员,struct表示数据 ...
- 阿里java开发规范学习(附P3C IDEA插件 帮助规范的养成)
浅析 阿里巴巴 Java 开发规约 (未完成) 更加优秀的页面展现请到浅析 阿里巴巴 Java 开发规约 contents 为什么要学 编程规约 P3C IDEA 插件 why-use 我们知道,一般 ...
- W3C规范学习
w3c:万维网联盟(World Wide Web Consortium,W3C),又称W3C理事会.W3C组织是对网络标准制定的一个非赢利组织,W3C是万维网联盟的缩写,像HTML.XHTML.CSS ...
- NFC规范学习之一 ---整体结构
1.NFC 采用两个感应线圈进行数据交互,其中至少必须有一个设备产生13.56MHZ的磁场,该场被调制以方便数据传输.通讯中,一个设备处于initiator模式(就是发起通讯)另外一个设备则工作在ta ...
- AMD规范学习笔记
背景 NodeJS的一套比较简洁 Moudles 规范, 使得在服务器端的模块化变得更加简单.很长一段时间,很多公司或者项目都有自己的一套模块化机制, 却未能形成一套统一的标准, NodeJS的Mou ...
- SpringCloud入门之YAML格式文件规范学习
1. 认识 YAML YAML(发音 /ˈjæməl/)是一个类似 XML.JSON 的数据序列化语言.其强调以数据为中心,旨在方便人类使用:并且适用于日常常见任务的现代编程语言.因而 YAML 本身 ...
- Web Components 规范学习
最新的规范在这里:http://w3c.github.io/webcomponents/explainer/ 依据规范,有以下四个组成部分: Templates Custom Elements Sha ...
随机推荐
- vue的样式绑定
vue在样式绑定,看这官方的文档,怎么试都不行后来看了一篇文章 <div :class="[rankClass]"></div> <script> ...
- Oracle 日志报错导致的 “没有登录” 问题
遇到的问题是日志空间满了,导致Oracle无法登陆,但用PL/SQL登录仅会提示“没有登录” # 首先检查日志空间是否满了,并删除过期日志 rman target sysdba/password@or ...
- swift新建类和子类方法的重写与重载
1.首先什么是重写与重载? 一.重写(override) override是重写(覆盖)了一个方法,以实现不同的功能.一般是用于子类在继承父类时,重写(重新实现)父类中的方法. 重写(覆盖)的规则: ...
- 2-R型聚类
将相似的属性聚合在一起 clc, clear; % a = load('E:\a-建模\<数学建模算法与应用>课件资源\数学建模算法与应用\程序及数据\10第10章\gj.txt'); a ...
- jquery Ajax跨域请求
这是jquery api文档对跨域请求的解析:如果获取的数据文件存放在远程服务器上(域名不同,也就是跨域获取数据),则需要使用JSONP类型.使用这种类型的话,会创建一个查询字符串参数 callbac ...
- requests对象
属性 0.HttpRequest.scheme 表示请求方案的字符串(通常为http或https) 1.HttpRequest.body 一个字符串,代表请求报文的主体.在处理非 HTTP 形式的报文 ...
- JS实现windows.open打开窗口并居中
function openWin() { var url='Add.aspx'; //转向网页的地址; ...
- C#通过Redis实现分布式锁
Redis有三个最基本属性来保证分布式锁的有效实现: 安全性: 互斥,在任何时候,只有一个客户端能持有锁. 活跃性A:没有死锁,即使客户端在持有锁的时候崩溃,最后也会有其他客户端能获得锁,超时机制. ...
- MyBatis和Hibernate相比较
作者:乌拉拉链接:http://www.zhihu.com/question/21104468/answer/58579295 1.开发对比开发速度 Hibernate的真正掌握要比Mybatis来得 ...
- Understanding sun.misc.Unsafe
转自: https://dzone.com/articles/understanding-sunmiscunsafe The biggest competitor to the Java virtua ...