`
sharp-fcc
  • 浏览: 110833 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java 内存模型与线程 正文

阅读更多

        在前传中讲述了jvm中内存的划分, 是从线程的维度, 而不是从堆 , 栈,方法区的角度.两者直接属于不同维度.前传中讲述了java内存的基本概念.这一章主要说一说内存间交互以及java中一些关键字, 一些规则的实现

1.在内存间的交互操作

 关于主内存与工作内存之间的具体的交互协议.有如下8中操作:[/size]

(1) lock: 作用与主内存的变量,一条线程独有.[/size]

(2) unlock: 变量被释放.[/size]

(3) read: 一个变量从主内存传输到线程工作内存.[/size]

(4) load: 跟readu对应,作用与工作内存[/size]

(5) use: 当虚拟机遇到一个给变量赋值的字节码指令时执行这个操作.[/size]

(6) store: 将工作内存中的一个变量的值传到主内存中[/size]

(7) write: 接上一步,作用在主内存中的.[/size]

(8) assign: 赋值操作.[/size]


2. volatile 关键字:[/size]

volatile 不太容易被正确理解, 所以许多程序员不太习惯去用他, 用 synchronized 来取代.[/size]

如下是两种特性:[/size]

(1) 保证此变量对所有线程的可见性, 这里的可见性是指当一条线程修改了这个变量的值, 新值对于其他线程是立即可知的.而普通变量不是这样的, A修改了一个值, 需要向主内存回写, 另外一个线程B 需要在A写完之后从主内存读取,新的变量才会被B可见.[/size]

volatile变量在各个线程中的工作内存中不存在一致性问题, 但是并不是原子性的, 需要通过 一些操作来保证他的原子性.[/size]

 可以使用volatile来控制并发.[/size]

volatile boolean shutdownRequested;

public void shutdown(){
       shutdownRequested = true;
}

public void doWork(){
         while(!shutdownRequest)
//                do sth
}




(2) 禁止指令重排序优化[/size]

     比较复杂, 不说了[/size]

实现规则:[/size]

(1)  要求 volatile 修饰的变量严格按照  load, read和use 的顺序.即在用之前保证刷新[/size]

(2)  严格按照  assign, store write 的顺序操作, 即保证修改之后立即写回主内存[/size]

(3)  动作顺序有关, 不说了[/size]



3.  原子性, 可见性,有序性的实现[/size]

(1)  原子性 : 保证原子性操作的有6个操作: read, load,assign, use,store, write . 更大的操作通过 开放lock, unlock 操作直接开放给用户, 通过 synchronized 使用.[/size]

(2)  可见性:  上面的 volatile 已经可以说明这一点实现过程,补充一点, java中还有两个关键字能实现: synchronized , final.[/size]

(3)  有序性: null[/size]


 

分享到:
评论

相关推荐

    java内存模型和线程安全

    java内存模型和线程安全,详细解析java的 堆栈模型和线程机制

    Java 内存模型

    Java内存模型是Java虚拟机规范中定义的一部分,它规定了Java程序中变量的读写行为,以及线程之间的交互规则。理解Java内存模型对于编写正确、高效的多线程程序至关重要。在Java 5之前,Java内存模型的描述比较模糊,...

    深入理解Java内存模型

    综上所述,Java内存模型是一个复杂的系统,它涉及了线程间的通信与同步、共享变量的访问规则、重排序以及内存屏障等多个方面。为了编写出正确的多线程程序,深入理解Java内存模型是不可或缺的。Java内存模型的规则和...

    cpu 内存模型和java内存模型

    volatile关键字是Java内存模型中一个非常重要的概念,它保证了变量的可见性,即任何线程对该变量的修改都会立即被其它线程得知,但并不保证操作的原子性。 ### 锁机制 在Java中,锁是一种同步机制,用来控制多个...

    深入理解Java内存模型 pdf 超清版

    Java内存模型,简称JMM(Java Memory Model),是Java编程语言规范的一部分,它定义了程序中各个线程如何访问和修改共享变量,以及如何确保数据的一致性。深入理解Java内存模型对于编写高效的并发程序至关重要。本文...

    JSR133(JavaTM内存模型与线程规范).zip

    JSR-133 :Java TM 内存模型与线程规范

    java内存模型和一些多线程的资料

    Java内存模型(JVM Memory Model,简称JMM)是Java平台中的一个重要概念,它定义了在多线程环境下,如何在共享内存中读写变量的行为。JMM的主要目标是确保多线程环境下的可见性、有序性和原子性,从而避免数据不一致...

    java线程-Java内存模型

    Java线程-Java内存模型是Java并发编程中的关键概念,它描述了多个线程如何共享和访问内存资源,以及如何保证数据的一致性和安全性。Java内存模型(JMM)是Java虚拟机规范的一部分,用于定义程序中各个线程对共享变量...

    JSR133中文版.pdf

    标题“JSR133中文版.pdf”指向了一个文档,该文档是Java内存模型与线程规范的中文翻译版。JSR代表Java Specification Requests,这是Java社区流程中提出的一个规范请求编号,它针对特定主题定义了一套标准或规范。在...

    深度剖析java内存模型

    Java内存模型(Java Memory Model,简称JMM)是Java虚拟机(JVM)规范中定义的一种内存模型,它涉及了线程之间共享变量的可见性问题。在并发编程中,理解Java内存模型对于编写正确的多线程程序至关重要。 首先,...

    Java内存模型的历史变迁

    为了确保线程间数据的一致性,Java内存模型规定了一系列复杂的规则来管理线程与共享变量之间的交互过程。 ##### 主内存与工作内存 - **主内存**:存储着各个线程共享的数据,其中每个共享变量都有一份master copy...

    lanlan2017#JavaReadingNotes#第12章 Java内存模型与线程 12.1 概述1

    title: 第12章 Java内存模型与线程 12.1 概述- 7 深入理解Java虛拟机:JVM高级特性与最佳实践(第3版)- 5第五部分 高效并发- 第1

    java内存模型(有助理解多线程)

    ### Java内存模型(有助理解多线程) #### JMM简介 Java内存模型(JMM,Java Memory Model)是Java虚拟机规范中一个重要的概念,它规定了程序中各种变量(包括实例字段、静态字段和数组元素)的访问规则,以及在...

    java内存模型文档

    Java内存模型,简称JMM(Java Memory Model),是Java编程语言规范的一部分,它定义了线程如何共享和访问内存,以及在并发编程中如何处理数据一致性的问题。理解JMM对于编写高效、线程安全的Java代码至关重要。 1. ...

    深入理解 Java 内存模型_程晓明_InfoQ_java_内存模型_

    Java内存模型,简称JMM(Java Memory Model),是Java编程语言规范的一部分,它定义了线程如何共享和访问内存,以及在多线程环境中如何保证数据一致性。理解JMM对于编写高效、正确且线程安全的Java代码至关重要。 ...

    深入理解java内存模型

    Java内存模型(Java Memory Model,JMM)是Java平台中非常关键的概念,它定义了线程如何共享和访问内存中的数据,以及在多线程环境下如何保证数据的一致性。这本书"深入理解Java内存模型"显然是为了帮助读者深入探讨...

    内存模型-多线程内存模型

    ### C++09内存模型与多线程编程 #### 一、引言 随着多核处理器的普及,多线程编程成为了现代软件开发中的一个重要组成部分。C++作为一门广泛使用的编程语言,在C++09标准中引入了一系列重要的新特性,其中最显著的...

    Java内存模型详解

    Java内存模型(Java Memory Model, JMM)是Java虚拟机(JVM)的一部分,用于规定程序中的各种变量(包括实例字段、静态字段和数组元素等)在多个线程共享内存中的读写行为。JMM的主要目的是确保所有线程能够看到一致...

    JAVA内存模型与垃圾回收

    JAVA内存模型与垃圾回收是Java开发中至关重要的概念,它们直接影响到程序的性能和稳定性。首先,我们来看看Java内存模型。 Java内存模型,通常被称为JVM内存模型,它定义了程序中不同部分如何访问和共享数据。在...

Global site tag (gtag.js) - Google Analytics