最近在看多线程相关的东西,通过阅读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. 新做的系统,第一次拉maven项目时,鼠标左键+ctrl键不能进方法

    对项目选择属性,跳转至:选择以下步骤

  2. 游戏动作师使用Unity3D遇到过的所有问题

    http://blog.csdn.net/onafioo/article/details/50865169 http://www.gameres.com/thread_480489.html 文/拉撒 ...

  3. Java TreeMap的排序

    TreeMap 和 HashMap 用法大致相同,但实际需求中,我们需要把一些数据进行排序:以前在项目中,从数据库查询出来的数据放在List中,顺序都还是对的,但放在HashMap中,顺序就完全乱了. ...

  4. [C++] Variable/Hex conversion

    程序编译链接原理预处理:.c -> .i gcc -E hello.c -o hello.i 编译:.i / .c -> .sgcc -S hello.i -o hello.s 汇编:.s ...

  5. SQL Server数据库大型应用解决方案总结(转)

    出处:http://tech.it168.com/a2012/0110/1300/000001300144.shtml [IT168 技术]随着互联网应用的广泛普及,海量数据的存储和访问成为了系统设计 ...

  6. Git & Github使用总结

    Linux下git的安装 在终端下输入 git , 看系统有没有安装git. 如果没有安装则会出现以下提醒: The program 'git' is currently not installed. ...

  7. SQL*Plus用法指南

    SQL是一种命令式的语言,它是用户操作数据库的最重要的一种方式.SQL语句在执行时,需要有一个执行环境. 开发人员在开发软件时,最终的结果是形成一个应用程序.在应用程序中可以嵌入SQL语句,利用这些S ...

  8. (转)走进AngularJs(六) 服务

    原文地址:http://www.cnblogs.com/lvdabao/p/3464015.html 今天学习了一下ng的service机制,作为ng的基本知识之一,有必要做一个了解,在此做个笔记记录 ...

  9. MFC多线程详细讲解(转)

    一.问题的提出 编写一个耗时的单线程程序: 新建一个基于对话框的应用程序SingleThread,在主对话框IDD_SINGLETHREAD_DIALOG添加一个按钮,ID为IDC_SLEEP_SIX ...

  10. Android-Style样式

    说到Style样式在,HTML+Javascript+CSS中,CSS就是样式,样式可以把很多通用到效果,统一为一个样式,达到通用的目的,也可以让代码更加简洁. 什么时候用Style样式 ? 例如:A ...