zoukankan      html  css  js  c++  java
  • 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 边缘,它的定义如下:
      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动作
  • 相关阅读:
    总结随笔
    Beta冲刺第七天
    Beta冲刺第六天
    Beta冲刺第五天
    Beta冲刺第四天
    Beta冲刺第三天
    POJ 2240 Arbitrage
    POJ 3660 Cow Contest
    POJ 1797 Heavy Transportation
    LightOJ 1123 Trail Maintenance
  • 原文地址:https://www.cnblogs.com/gulang-jx/p/JSR133.html
Copyright © 2011-2022 走看看