当前位置:德化新闻中心 > 媒体聚焦 >

运城达内教育java内存模型规范分享
时间:2020-04-12  来源:  作者:admin666

我们在上文中给大家简单介绍了java编程开发中的死锁的概念与产生原因等内容,而今天我们就再来了解一下,java内存模型的一些基础知识与规则指令。

运城达内教育java内存模型规范分享

一、JAVA内存模型

Java内存模型是个很复杂的规范,这里简单介绍下。

Java内存模型规定了所有的变量都存储在主内存中,每条线程还有自己的工作内存,线程的工作内存中保存了该线程中是用到的变量的主内存副本拷贝,线程对变量的所有操作都必须在工作内存中进行,而不能直接读写主内存。不同的线程之间也无法直接访问对方工作内存中的变量,线程间变量的传递均需要自己的工作内存和主存之间进行数据同步进行。

JMM是一种规范,目的是解决由于多线程通过共享内存进行通信时,存在的本地内存数据不一致、编译器会对代码指令重排序、处理器会对代码乱序执行等带来的问题。目的是保证并发编程场景中的原子性、可见性和有序性。

二、happen-before规则

happen-before规则是JMM中限制指令重排序的一些规则。意思是前面一个操作的结果对后续操作是可见的。这里总结6条happen-before规则:

1、程序的顺序性规则。

意思就是程序前面对某个变量的修改一定是对后续操作可见的。

2、volatile变量规则

对volatile白你两的写操作happen-before于对该变量的读操作。这也是volatile类型的变量能保证可见性的原因。

3、传递性规则

如果Ahappen-beforeB,Bhappen-beforeC。则Ahappen-beforeC。

4、监视器锁规则

监视器锁指的就是synchronized。对一个锁的解锁happen-before于后续对这个锁的加锁。

5、线程启动规则

它是指主线程A启动子线程B后,子线程B能够看到主线程在启动子线程B前的操作。

6、线程join规则

这条是关于线程等待的。它是指主线程A等待子线程B完成(主线程A通过调用子线程B的join()方法实现),当子线程B完成后(主线程A中join()方法返回),主线程能够看到子线程的操作。

【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。




上一篇:机器学习的概念解析
下一篇:没有了

图片新闻
热闻排行
友情链接

Copyright (C) 2016 德化新闻中心 版权所有,未经授权禁止复制或镜像,本站保留所有权利
蜀icp备14010686号-1