java并发编程专题--java内存模型(一)

    前面已经介绍了部分java并发的内容,并且在《并发编程实战》一书中也是将该章节放到最后才讲,可是我的认为这一章应该放到前面讲才对,由于java内存模型是整个java并发编程的核心基础。java

    在并发编程中线程之间的数据通讯有两种方式,一种是经过读写内存中的公共状态进行显式通讯,另外一种是经过发送和接收消息进行隐式通讯。java就是采用显性方式进行通讯的,而例如scala语言就是采用隐性的消息传递方式进行通讯的(scala是基于JVM运行的,而它采用了消息传递方式,本人估计也是在显性方式基础上进行扩展的)。隐性的工做方式在编程的时候比显性方式要简单,但显性的方式在灵活性和效率上应该比显性方式要高,而且编程难度也高,因此要了解java的内存模型。编程

   如今的计算机基本都是多处理器共享内存的架构,并且每一个处理器内部有本身的缓存,按期的与主内存进行数据同步。不一样的处理器架构提供了不一样的缓存一致性(这点在“cpu缓存一致性”专题中做过说明)协议。为了提升效率,处理器会适当放宽一致性保证(不会保证任意时刻各个缓存与内存之间的数据都是一致的),但提供了称为“内存栅栏”的特殊指令进行控制。为了使java开发人员无须关心不一样架构上内存模型之间的差别,从而提供了本身内存模型。缓存

    只要变量会被多个线程进行读写就会受java内存模型的影响。架构

    该专题主要从三个方面进行描述:一、内存可见性;二、重排序;三、happens before规则并发

相关文章
相关标签/搜索