假设线程 A 在执行 writer()方法,线程 B 执行 reader()方法 。
线程 B 可能就会出现下图所示的重排序
文章插图
可以看到,由于读对象的普通域被重排序到了读对象引用的前面,就会出现线程 B 还未读到对象引用就在读取该对象的普通域变量,这显然是错误的操作 。而 final 域的读操作就“限定”了在读 final 域变量前已经读到了该对象的引用,从而就可以避免这种情况 。
结论:读 final 域的重排序规则可以确保在读一个对象的 final 域之前,一定会先读包含这个 final 域的对象的引用 。
结束今天给大家总结了一下使用 final 关键字容易忽视的一些小细节,看完希望你能有所收获 。
推荐阅读
- 三只乌龟的故事 寓意?三只乌龟的故事视频
- 写给后端的Nginx初级入门教程
- Linux上TCP的几个内核参数调优
- 一次几乎不可能的数据库迁移
- 深入理解 Linux 内核中的 RCU 机制
- 最丑的外星人 外星生物长什么样子
- 三国演义中的真实事件 三国演义真实存在的事件
- 狼的知识点 狼的相关知识
- 6款Windows良心优质软件推荐,需要的自取
- 考古并不是简单的将珍贵文物挖掘出来呈现给世人 孔子看到的不一定是真实的故事