`
bruce008
  • 浏览: 173368 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Java 内存模型以及并发编程点滴

阅读更多

感觉java 的并发编程没有那么神秘的也就是基于JSR 133 :Java 内存模型和线程规范。并发编程中用的最多的各种锁比如    intrinsic lock  (synchronized  方法或者 synchronized block)  和 ReentranLock  有两个非常重要的作用:

    第一, 保证只有一个线程能够进入lock 控制的代码区。这个应该是大家都很清楚的了。 

    第二   就是内存的可见性。感觉很多程序员包括本人以前也不是太重视。  编译器会在各种锁相关的代码里面的锁离开前以及锁进入后分别加入内存的store barrier 和 load barrier。 store barrier 会让当前线程将操作的数据从cache 中 同步到主内存。 load barrier 会刷新cache 保证能从主内存拿到最新的数据。  这样不同线程如果在不同cpu core 上执行也会同步它们的cache 保证数据得到同步。 

 

   volatile 关键字在并发编程的时候常常作为限定符用到各种状态或开关变量中。  JSR133 中规定:在 valatile 的写后面放入 store barrier,   读前面 放入 load barrier. 因此一个线程如果修改了  volatile 变量,其它的线程可以读到这个变量的最新值。  JSR 133 也就对 valatile 变量做此保证。

      如果两个线程同时修改volatile 变量的话 行为就不确定了。 只能一个线程能修改 volatile 变量。

      volatile 变量与没有   read-modify-write 这种原子性的保证。 这个需要各种 Atomic××× 变量。

 

   final fields  在JSR 133 着墨也比较多的。  An object is con-

sidered to be completely initialized when its constructor finishes.  A thread that can only see a

reference to an object after that object has been completely initialized is guaranteed to see the

correctly initialized values for that object’s final fields.  也就是说如果一个对象完成了初始化, 它的final fields 的值一定是可见的了。  我们可以利用这种特性定义些 immutable 对象(它们的所有域是final的)用来在 线程之间不需要加锁来交换数据。 

 

分享到:
评论

相关推荐

    java内存模型与并发技术

    阿里巴巴专家讲座——java内存模型与并发技术。 主要内容: 学习java并发理论基础:Java Memory Model 学习java并发技术基础:理解同步是如何工作 分析程序什么时候需要同步 几个典型的并发设计策略

    Java 并发编程实战.pdf

    书中会首先介绍Java并发编程的基础知识,包括线程的创建和运行,同步机制的基本用法,以及Java内存模型的相关概念。随着章节的深入,作者可能会更深入地讲解Java提供的并发工具,例如锁、原子变量、线程池、以及并发...

    java NIO和java并发编程的书籍

    java NIO和java并发编程的书籍java NIO和java并发编程的书籍java NIO和java并发编程的书籍java NIO和java并发编程的书籍java NIO和java并发编程的书籍java NIO和java并发编程的书籍java NIO和java并发编程的书籍java...

    Java 内存模型

    Java内存模型是Java虚拟机规范中定义的一部分,它规定了Java程序中变量的读写行为...程序员需要对内存模型有充分的理解,包括它的原理、规则以及如何在实际编程中应用这些规则,从而编写出能够正确处理并发的高效代码。

    深入Java内存模型:揭秘并发编程的基石

    Java内存模型是Java并发编程的基础,它通过主内存和工作内存的概念以及一系列同步规则来确保多线程环境下的程序正确性。通过使用`volatile`关键字和`synchronized`关键字等机制,开发者可以在复杂的并发场景下保证...

    java并发编程2

    7. **Java内存模型** - **JMM(Java Memory Model)** 规定了线程如何访问和修改共享变量,以及对这些操作的排序规则,以保证多线程环境下的正确性。 8. **死锁、活锁和饥饿** - **死锁** 是指两个或多个线程互相...

    java 并发编程的艺术pdf清晰完整版 源码

    8. **JVM内存模型与并发**:JVM内存模型对并发编程有直接影响,书中会阐述Java内存模型(JMM)的概念,以及volatile关键字的作用。 9. **并发编程最佳实践**:最后,书中会提供一些并发编程的最佳实践,帮助读者...

    java并发编程与内存模型

    描述java并发编程原理 一.内存模型的相关概念 二.并发编程中的三个概念 三.Java内存模型 四..深入剖析volatile关键字 五.使用volatile关键字的场景

    深入理解Java内存模型

    Java内存模型是并发编程中一个至关重要的概念,它定义了共享变量的访问规则,以及这些变量如何在多线程环境下进行读写操作。在深入理解Java内存模型之前,我们需要先了解并发编程模型的分类,然后掌握Java内存模型的...

    cpu 内存模型和java内存模型

    Java程序员了解CPU以及相关的内存模型,对于深入理解Java内存模型以及并发编程至关重要。CPU作为计算机硬件的核心,其架构和工作原理影响着软件的性能和执行效率。尤其在Java这种多线程、高并发的编程语言中,对CPU...

    《java 并发编程实战高清PDF版》

    Java内存模型(JMM)是理解并发编程中数据一致性问题的基础。JMM定义了线程如何访问和共享内存,确保在并发环境下正确地执行。书中详细阐述了可见性、原子性和有序性这些概念,并通过`volatile`关键字和`final`修饰...

    JAVA并发编程艺术 高清pdf

    JAVA并发编程艺术 高清pdf : 1.并发变成的挑战 2. java并发机制的底层实现原理 3. java 内存模型 4. java并发编程基础 5.java中的锁。。。。。。。

    Java内存模型分析与其在编程中的应用.pdf

    Java内存模型是Java平台的核心概念之一,它定义了Java程序中各种变量的访问规则以及如何在运行时分配内存区域给对象。Java内存模型的深入分析对于编写高性能的Java应用程序至关重要,本文将详细探讨Java内存模型的...

    基于内存模型的Java并发编程.pdf

    基于内存模型的Java并发编程.pdf

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

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

    java并发编程内部分享PPT

    Java内存模型(JMM)是理解并发编程中内存可见性问题的基础。它定义了线程如何访问和修改共享变量,以及这些操作如何在不同线程之间同步。volatile和synchronized都是JMM的一部分,它们帮助实现了线程之间的通信和...

    《Java并发编程的艺术》

    《Java并发编程的艺术》内容涵盖Java并发编程机制的底层实现原理、Java内存模型、Java并发编程基础、Java中的锁、并发容器和框架、原子类、并发工具类、线程池、Executor框架等主题,每个主题都做了深入的讲解,同时...

    JAVA并发编程实践.pdf+高清版+目录 书籍源码

    其次,书中深入剖析了Java内存模型(JMM)和可见性问题,这是理解并发编程中数据一致性问题的基础。Java的volatile关键字、synchronized块和方法、以及Atomic类都是解决这些问题的关键工具。作者通过实际案例解释了...

    java并发编程

    Java并发编程是Java开发者必须掌握的...此外,书中还可能涉及Java内存模型、线程通信(如wait/notify机制)以及并发设计模式等高级主题。总的来说,Java并发编程是一门深奥的学问,需要不断学习和实践才能真正精通。

Global site tag (gtag.js) - Google Analytics