这篇文章将为大家详细讲解有关java中final域的内存语义是什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
1、说明
对于final域的内存语义,编译器和处理器要遵守两个重排序规则(内部实现也是使用内存屏障):
写final域的重排序规则:在构造函数内对一个final域的写入,与随后把这个被构造对象的引用赋值给一个引用变量,这两个操作之间不能重排序。
读final域的重排序规则:初次读一个包含final域的对象的引用,与随后初次读这个final域,这两个操作之间不能重排序。
2、实例
public class FinalExample { int i;//普通域 final int j;//final域 static FinalExample obj; public FinalExample () { i = 1;//写普通域。对普通域的写操作【可能会】被重排序到构造函数之外 j = 2;//写final域。对final域的写操作【不会】被重排序到构造函数之外 } // 写线程A执行 public static void writer () { obj = new FinalExample (); } // 读线程B执行 public static void reader () { FinalExample object = obj;//读对象引用 int a = object.i;//读普通域。可能会看到结果为0(由于i=1可能被重排序到构造函数外,此时y还没有被初始化) int b = object.j;//读final域。保证能够看到结果为2 } }
1.SpringMVC,Spring Web MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架。2.Shiro,Apache Shiro是Java的一个安全框架。3.Mybatis,MyBatis 是支持普通 SQL查询,存储过程和高级映射的优秀持久层框架。4.Dubbo,Dubbo是一个分布式服务框架。5.Maven,Maven是个项目管理和构建自动化工具。6.RabbitMQ,RabbitMQ是用Erlang实现的一个高并发高可靠AMQP消息队列服务器。7.Ehcache,EhCache 是一个纯Java的进程内缓存框架。
关于“java中final域的内存语义是什么”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。