博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java内存模型与线程
阅读量:6656 次
发布时间:2019-06-25

本文共 730 字,大约阅读时间需要 2 分钟。

hot3.png

1,硬件的效率与一致性问题

    由于cpu的运算速度与计算机内存io的速度差几个数量级,所以为了提升cup的利用率,不得不在cup和内存之间加上一层桥梁--高速缓存,计算机可以将数据从内存复制到高速缓存中,cup就可以直接与高速缓存通讯,然后将计算结果再复制回内存。但是当有多个线程同时计算的时候,可能数据复制的时候会并发的执行,这时候就出现了数据一致性问题

2,java内存模型

    (1)内存间交互操作

  • lock:想成锁住主内存中的一个变量
  • unlock:释放锁住的主内存
  • read:将主内存变量的值传递到工作内存中
  • load:将主内存传递到工作内存的变量放到工作内存的变量副本中
  • use:将工作内存变量值传递给执行引擎
  • assign:将执行引擎计算的值赋值给工作内存
  • store:将工作内存变量传递给主内存
  • write:将传递给主内存变量存入主内存变量中

    (2)对于volatile型变量的特殊规则

  • 使用volatile修饰变量可以保证此变量的可见性,并且禁止volatile代码前后的指令重排序
  • volatile读操作跟普通变量没有区别,但是写的话会慢一些,因为代码中插入和许多内存屏障指令来保证处理器不发生乱序执行。
  • use操作必须在load和read相关联,必须一起出现
  • assign,store,write必须联系一起出现

    (3)内存模型的特性

  • 原子性:
  • 可见性:使用volatile ;final;synchronized 可以实现。
  • 有序性:cup会有指令重排序的可能。使用volatile或synchronized可以实现有序性。

 

     (4)线程状态转换

 

        

 

 

 

        

转载于:https://my.oschina.net/u/1169535/blog/885303

你可能感兴趣的文章
4-4面向对象程序设计
查看>>
JQuery设置创建表格并设置样式
查看>>
mysql5.7采坑
查看>>
mysql5.5手册读书日记(4)
查看>>
20172304 《程序设计与数据结构》第三周学习总结
查看>>
NSScanner
查看>>
Mac下如何显示隐藏文件
查看>>
CA1060
查看>>
java_包含抽象方法的枚举类
查看>>
OS | Socket
查看>>
02-CSS基础与进阶-day1-录像293
查看>>
Web Services 应用开发学习笔记(三):XML模式定义
查看>>
Hadoop之hive 其他
查看>>
基础题(二)
查看>>
BGD 通信15-1 150206102 王嘉良 DDS信号发生器
查看>>
4-26 pts dts
查看>>
顺序查找JAVA实现 设置哨兵
查看>>
第十一章 继承与派生 学习笔记
查看>>
SQL 模糊查询 模糊查找 字符串匹配
查看>>
javascript-demo
查看>>