课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
随着互联网的不断发展,越来越多的人都在学习java编程开发语言,而今天我们就通过案例分析来了解一下,java内存模型的特性都有哪些。
JMM(Java内存模型)是一种抽象的概念,描述了一组规则或规范,定义了程序中各个变量的访问方式。
JVM运行程序的实体是线程,每个线程创建时JVM都会为其创建一个工作内存,是线程的私有数据区域。JMM中规定所有变量都存储在主内存,主内存是共享内存。线程对变量的操作在工作内存中进行,先将变量从主内存拷贝到工作内存,操作完成后写会主内存。不同线程间无法访问对方的工作内存,线程通信(传值)通过主内存来完成。
JMM对于同步的规定:
线程解锁前,必须把共享变量的值刷新回主内存
线程加锁前,必须读取主内存的新值到自己的工作内存
加锁解锁是同一把锁
JMM的三大特性
可见性
原子性
顺序性
原子性是不可分割,某个线程正在做某个具体业务时,中间不可以被分割,要么全部成功,要么全部失败。
重排序:计算机在执行程序时,为了提高性能,编译器和处理器常常对指令做重排序,源代码经过编译器优化重排序、指令并行重排序、内存系统的重排序之后得到终执行的指令。
在单线程中保证程序终执行结果和代码执行顺序执行结果一致。
多线程中线程交替执行,由于重排序,两个线程中使用的变量能否保证一致性无法确定,结果无法确定。
处理器在处理重排序时需要考虑数据的依赖性。
volatile实现禁止指令重排序,避免多线程环境下程序乱序执行。是通过内存屏障指令来执行的,通过插入内存屏障禁止在内存屏障后的指令执行重排序优化,并强制刷出缓存数据,保证线程能读取到这些数据的新版本。
希望这辈子,最让你无悔的事情就是来达内学习!学习向来不是件易事,但无论过程多么艰难,希望你依然热爱生活,热爱学习!永远记得,达内将与你一同前行!现在扫码,立即领取万元课程礼包,助力0基础快速入行,为你梳理行业必备技能,全方位了解岗位发展前景!
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。更多内容请在707945861群中学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。