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 ...
随机推荐
- android-tip-SocketException之ETIMEDOUT
异常出现时间 如果我们有一个长连接,此时网络被关闭,或者暂时失去信号, 此时就会出现此异常. 如果出现此异常,则不得不重连.
- swift新建类和子类方法的重写与重载
1.首先什么是重写与重载? 一.重写(override) override是重写(覆盖)了一个方法,以实现不同的功能.一般是用于子类在继承父类时,重写(重新实现)父类中的方法. 重写(覆盖)的规则: ...
- CGAffineTransformMake 矩阵变换 的运算原理(转)
1.矩阵的基本知识: struct CGAffineTransform { CGFloat a, b, c, d; CGFloat tx, ty; }; CGAffineTransform CGAff ...
- 开启Windows8里面的Hyper-V虚拟机功能
首先了解下什么是Hyper-V?也就是虚拟化技术,允许终端用户在同一台机器上运行多个操作系统,支持32位和64位系统,可以直接在Windows 8上创建自己的虚拟机.开启Hyper-V虚拟机需要更多的 ...
- [C++] Type Conversion(类型转换)
Type Conversion(类型转换) Two kinds of type conversion explict type conversion(显式类型转换) impict type conve ...
- Nlog- Application Logging in C#
当你在谷歌搜索 Application Loggin in C#,排在最前面的是这个 .NET Logging Tools and Libraries ,点击进去你会发现里面收录了不错的日记工具及文 ...
- Native2Ascii文件转换 -- 待完善
摘自:https://www.oschina.net/code/snippet_87799_1612 Native2Ascii文件转换 -- 待完善 package com.xxx.xxx.Util; ...
- springMvc 核心配置
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.spr ...
- JS实现windows.open打开窗口并居中
function openWin() { var url='Add.aspx'; //转向网页的地址; ...
- java Long、Integer 、Double、Boolean类型 不能直接比较
测试: System.out.println(new Long(1000)==new Long(1000)); System.out.println(new Integer(1000)==new In ...