java多线程之内存模型

来源:互联网 发布:中国软件企业排名2016 编辑:程序博客网 时间:2024/06/05 17:16

java多线程之内存模型


内存模型和Java内存模型

1.什么是内存模型(Memory Model)?

对于处理器而言,一个内存模型就是定义一些充分必要的规范,这些规范使得其他处理器对内存的写操作对当前处理器可见,当前处理器的写操作对其他处理器可见。特别说明:其他处理器对内存的写一定发生在当前处理器对同一内存的读之前,称之为其他处理器对内存的写对当前处理可见。

通俗一点来说,内存模型的其中一个作用就是确保处理器在处理数据时的数据同步。对于这个理解,个人认为可以与数据库的事务做一定的参考。在数据库中处理事务时,对于并发操作来说为了保证数据的原子性和一致性常常使用锁机制(这里的理解可能有些片面,毕竟个人理解并不是特别深入,欢迎指正)。而对于“可见性”这个概念会在后面的文章中解释。

2.Java内存模型(JMM)
同样地,Java内存模型就是一套规范,在这套规范中包含:

  • 线程之间如何通过内存通信
  • 线程之间通过什么方式通信才合法,才能得到期望的结果

而在这套规范中规定的内存结构是这样的:
简单讲,Java内存模型将内存分为共享内存和本地内存。共享内存又称为堆内存,指的就是线程之间的共享的内存包含所有的实例域、静态域和数组元素。每个线程都有一个私有的、只对自己可见的内存,称之为本地内存。具体请参考infoQ上文章,讲的比较具体。
Java内存模型中的内存结构如下图所示:
这里写图片描述
共享内存中共享变量虽然有所有的线程共享,但是为了提高效率,线程并不直接使用这些变量,每个线程都会在自己的本地内存中存储一个共享内存的副本,使用这个副本参与运算。由于这个副本的参与,导致了线程之间对共享内存的读取存在可见性问题。为了方便线程之间的通信,Java提供了volatile、synchronized、final三个关键字供我们使用。

0 0
原创粉丝点击