在前面谈到了一些关于内存模型以及并发编程中可能会出现的一些问题。下面我们来看一下Java内存模型,
研究一下Java内存模型为我们提供了哪些保证以及在java中提供了哪些方法和机制来让我们在进行多线程编程时能够保证程序执行的正确性。 在Java虚拟机规范中试图定义一种Java内存模型(Java Memory Model,JMM)来屏蔽各个硬件平台和操作系统的内存访问差异,
以实现让Java程序在各种平台下都能达到一致的内存访问效果。那么Java内存模型规定了哪些东西呢,它定义了程序中变量的访问规则,
往大一点说是定义了程序执行的次序。注意,为了获得较好的执行性能,
Java内存模型并没有限制执行引擎使用处理器的寄存器或者高速缓存来提升指令执行速度,
也没有限制编译器对指令进行重排序。也就是说,在java内存模型中,也会存在缓存一致性问题和指令重排序的问题。 Java内存模型规定所有的变量都是存在主存当中(类似于前面说的物理内存),每个线程都有自己的工作内存(类似于前面的高速缓存)。
线程对变量的所有操作都必须在工作内存中进行,而不能直接对主存进行操作。并且每个线程不能访问其他线程的工作内存。 举个简单的例子:在java中,执行下面这个语句:
i = 10;
执行线程必须先在自己的工作线程中对变量i所在的缓存行进行赋值操作,然后再写入主存当中。而不是直接将数值10写入主存当中。

最新文章

  1. gruntJs篇之connect+watch自动刷新
  2. Java IO 装饰者模式
  3. 绘制图形与3D增强技巧(二)----直线图元之点画
  4. C#实现根据IP 查找真实地址
  5. MOPSO 多目标例子群优化算法
  6. hdu2546 饭卡    01背包
  7. AngularJS PhoneCat代码分析
  8. 第十章 管理类型(In .net4.5) 之 使用反射
  9. ASP.NET 常用内置对象详解-----Response
  10. com.mysql.jdbc.exceptions.MySQLSyntaxErrorException错误
  11. 33 款主宰 2017 iOS 开发的开源库
  12. Maven项目中的配置文件找不到以及打包问题
  13. Linux常用服务器搭建
  14. linux服务配置
  15. PS 十分钟教你做出文字穿插效果
  16. 小程序view排版
  17. WIN10 ISO 官方
  18. JS如何创建对象
  19. 网络基础 港湾FlexHammer5010交换机镜像端口配置
  20. SSIS 遍历目录,把文件内容导入数据库

热门文章

  1. spring_JavaConfig
  2. Free Online SQL Formatter
  3. 12C 对表分区维护的增强
  4. bzoj 4453 cys就是要拿英魂!——后缀数组+单调栈+set
  5. Mac eclipse 连接 手机调试
  6. rmmod: can't change directory to '/lib/modules': No such file or directory
  7. 使用XV-11激光雷达做hector_slam
  8. 完整的qt安装教程
  9. 1115 Counting Nodes in a BST
  10. 010. windows10下安装kivy 1.9.1版