最近在看多线程相关的东西,通过阅读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 边缘,它的定义如下:
    1. 某个线程中的每个动作都happens-before该线程中该动作后续的动作
    2. 某个管程上unlock动作都happens-before统一管程上后续的lock动作
    3. 对某个volatile修饰的子字段的写操作happens-before每个后续对该volatile字段的读操作
    4. 在某个线程对象上调用start()方法happens-before该启动了的线程的任意动作
    5. 某个线程上的任意动作happens-before任意其他线程从该线程对象啥会给你的join()中返回
    6. 如果耨个动作a  happens-before  动作b,动作bhappens-before 动作c,那么动作a  happens-before动作

JSR133规范学习的更多相关文章

  1. Java内存模型-jsr133规范介绍

    原文地址:http://www.cnblogs.com/aigongsi/archive/2012/04/26/2470296.html; 近期在看<深入理解Java虚拟机:JVM高级特性与最佳 ...

  2. Java内存模型-jsr133规范介绍(转)

    最近在看<深入理解Java虚拟机:JVM高级特性与最佳实践>讲到了线程相关的细节知识,里面讲述了关于java内存模型,也就是jsr 133定义的规范. 系统的看了jsr 133规范的前面几 ...

  3. 公司C++规范学习

    目录 公司C++规范学习 语法部分 风格/约定 公司C++规范学习 语法部分 class和struct关键字的选择:class表示被封装的用户自定义类型,不公开定义非静态数据成员,struct表示数据 ...

  4. 阿里java开发规范学习(附P3C IDEA插件 帮助规范的养成)

    浅析 阿里巴巴 Java 开发规约 (未完成) 更加优秀的页面展现请到浅析 阿里巴巴 Java 开发规约 contents 为什么要学 编程规约 P3C IDEA 插件 why-use 我们知道,一般 ...

  5. W3C规范学习

    w3c:万维网联盟(World Wide Web Consortium,W3C),又称W3C理事会.W3C组织是对网络标准制定的一个非赢利组织,W3C是万维网联盟的缩写,像HTML.XHTML.CSS ...

  6. NFC规范学习之一 ---整体结构

    1.NFC 采用两个感应线圈进行数据交互,其中至少必须有一个设备产生13.56MHZ的磁场,该场被调制以方便数据传输.通讯中,一个设备处于initiator模式(就是发起通讯)另外一个设备则工作在ta ...

  7. AMD规范学习笔记

    背景 NodeJS的一套比较简洁 Moudles 规范, 使得在服务器端的模块化变得更加简单.很长一段时间,很多公司或者项目都有自己的一套模块化机制, 却未能形成一套统一的标准, NodeJS的Mou ...

  8. SpringCloud入门之YAML格式文件规范学习

    1. 认识 YAML YAML(发音 /ˈjæməl/)是一个类似 XML.JSON 的数据序列化语言.其强调以数据为中心,旨在方便人类使用:并且适用于日常常见任务的现代编程语言.因而 YAML 本身 ...

  9. Web Components 规范学习

    最新的规范在这里:http://w3c.github.io/webcomponents/explainer/ 依据规范,有以下四个组成部分: Templates Custom Elements Sha ...

随机推荐

  1. Spark之 使用SparkSql操作Hive的Scala程序实现

    依赖 <dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-hive_2 ...

  2. 开发 WebAPP 的几个前端框架(不断更新中)

    http://mobileangularui.com/ http://ionicframework.com/ http://www.idangero.us/framework7/ (中文文档:http ...

  3. 一道面试题Lintcode196-Find the Missing Number

    http://www.lintcode.com/en/problem/find-the-missing-number/# Find the Missing Number Given an array ...

  4. Nginx源码完全注释(4)ngx_queue.h / ngx_queue.c

    队列头文件ngx_queue.h #include <ngx_config.h> #include <ngx_core.h> #ifndef _NGX_QUEUE_H_INCL ...

  5. Opencv 发现轮廓 findContours

    vector<vector<Point>> vec_p; vector<Vec4i> vec_4f; findContours(img_canny1, vec_p, ...

  6. ansible介绍与安装

    一.什么是ansible ansible是python中一套模块,系统中的一套自动化工具,可以用来作系统管理.自动化命令等任务. 二.ansible优势 .ansible是Python中一套完整的自动 ...

  7. rpm管理

    系统上rpm命令管理程序包: 安装.卸载.升级.查询.校验.数据库维护 安装: rpm {-i|--install} [install-options] PACKAGE_FILE ... -v: ve ...

  8. hibernate方言

    hibernate中,方言是解决hql翻译成sql保证语法的正确,首先数据库都是支持sql的,不同的数据库会存在一些语法上面的差异.HQL则是基于对象的查询语言,当系统需要数据库的变换时,那么用hib ...

  9. STL中 map 和 multimap

    1. 所在头文件<map>. 命名空间std, 声明如下: namespace std{ template <class Key,class T, class Compare = l ...

  10. SQL虚拟数字辅助表

    虚拟数字辅助表是一个整数序列,可以用来完成多种不同的任务,如生成日期跟时间值序列,及分裂值列表.要用查询逻辑产生一个大的整数序列,可以使用交叉连接(cross join). 交叉联接(cross jo ...