
课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
Java编程开发语言是目前大多数软件开发程序员都在学习与应用的一种编程开发语言,而本文我们就简单来了解一下,Java编程一致性问题分析。
Java一致性模型指导原则是指制定一些规范来将复杂的物理计算机的系统底层封装到JVM中,从而向上提供一种统一的内存模型语义规则,一般是指Happens-Before规则。
Happen-Before关系原则,是Java内存模型中保证多线程操作可见性的机制,也是对早期语言规范中含糊的可见性概念的一个精确定义,其行为依赖于处理器本身的内存一致性模型。
Happen-Before关系原则主要规定了Java内存在多线程操作下的顺序性,一般是指先发生操作的执行结果对后续发生的操作可见,因此称其为Java一致性模型指导原则。
由于Happen-Before关系原则是向上提供一种统一的内存模型语义规则,它规范了JavaHotSpot(TM)VM虚拟机的实现,也能为上层JavaDeveloper描述多线程并发的可见性问题。
在Java领域中,Happen-Before关系原则主要有8种,具体如下:
单线程原则:线程内执行的每个操作,都保证happen-before后面的操作,这就保证了基本的程序顺序规则,这是开发者在书写程序时的基本约定。
锁原则:对于一个锁的解锁操作,保证happen-before加锁操作。
volatile原则:对于volatile变量,对它的写操作,保证happen-before在随后对该变量的读取操作。
线程Start原则:类似线程内部操作的完成,保证happen-before其他Thread.start()的线程操作原则。
线程Join原则:类似线程内部操作的完成,保证happen-before其他Thread.join()的线程操作原则。
线程Interrupt原则:类似线程内部操作的完成,保证happen-before其他Thread.interrupt()的线程操作原则。
finalize原则:对象构建完成,保证happen-before于finalizer的开始动作。
传递原则:Happen-Before关系是存在着传递性的,如果满足Ahappen-beforeB和Bhappen-beforeC,那么Ahappen-beforeC也成立。
对于Happen-Before关系原则来说,而不是简单地线性思维的前后顺序问题,是因为它不仅仅是对执行时间的保证,也包括对内存读、写操作顺序的保证。仅仅是时钟顺序上的先后,并不能保证线程交互的可见性。
在JavaHotSpot(TM)VM虚拟机内部的运行时数据区,但是真正程序执行,实际是要跑在具体的处理器内核上。简单来说,把本地变量等数据从内存加载到缓存、寄存器,然后运算结束写回主内存。
总的来说,JMM内部的实现通常是依赖于内存屏障,通过禁止某些重排序的方式,提供内存可见性保证,也就是实现了各种happen-before规则。与此同时,更多复杂度在于,需要尽量确保各种编译器、各种体系结构的处理器,都能够提供一致的行为。
【免责声明】本文系本网编辑部分转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与管理员联系,我们会予以更改或删除相关文章,以保证您的权益!更多内容请加danei0707学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。