所谓失败的原子性,就是在一个方法失败之后,使对象保持“它在被调用之前的状态”。因为,尤其是CheckedException发生后,一般是希望程序可以从异常中恢复过来的。
那么如何才能保持对象的状态呢?最简单的方法就是使用非可变类型的对象(见【第13条】)。因为无论什么时候,非可变类的状态都是不可改变的。
对于可变对象,常见的方法是在对其进行处理之前,先做参数有效性的检查(见【第23条】),如果参数有问题,马上就先抛出一个异常。这时候对象的状态还未改变。
另一种方法是,将处理的过程调整一下顺序,让可能抛出异常的处理写在前面,而会改变对象状态的处理写在后面。
还有一种不太常用的方法,是编写一段恢复代码,发生失败时,可以使对象回滚到操作开始之前的状态。
最后一种方法是,在对象的一份临时拷贝上执行操作,当操作正确结束后,再把临时拷贝中的结果复制给原来的对象。如果一旦失败,不进行这个复制,也就保持了原对象的状态。
总之,作为方法规范的一部分,任何一个异常都不应该改变对象调用该方法之前的状态。
【Effective Java 学习笔记】系列连载专题请见:
http://tonylian.iteye.com/categories/64208
分享到:
相关推荐
深入理解并发可见性、有序性、原子性与JMM内存模型深入理解并发可见性、有序性、原子性与JMM内存模型深入理解并发可见性、有序性、原子性与JMM内存模型深入理解并发可见性、有序性、原子性与JMM内存模型深入理解并发...
redis实现分布式锁,自旋式加锁,lua原子性解锁
原子性有序性可见性
本研究支持原子核指导原子的电子结构的挑衅性思想。 随着原子序数的增加,化学元素的原子摩尔体积演化服从原子的电子结构规则,与此同时,中子多余的加到原子核上的同时发生了镜面演化。 诸如d嵌段过渡金属的原子...
并发二:原子性、可见性、有序性
无论其他处理器执行什么指令,原子操作都会成功或完全失败。 原子指令可以用来做同步处理。由于原子指令可用于更改共享数据而无需获取和释放锁,因此可以实现更高的并行性。但是,由于它们是低层的,并且只能对数据...
多线程:可见性、有序性、原子性.xmind
分布式Redis原子操作示例,近期项目中遇到分布式项目中多节点大并发操作redis同一个key。此案例利用java调用LUA脚本实现redis操作的原子性。分享出来大家参考。
SQLite的原子提交原理SQLite的原子提交原理SQLite的原子提交原理SQLite的原子提交原理SQLite的原子提交原理SQLite的原子提交原理SQLite的原子提交原理SQLite的原子提交原理SQLite的原子提交原理SQLite的原子提交原理
原子核计算题原子核计算题原子核计算题原子核计算题
NULL 博文链接:https://woxintech2011.iteye.com/blog/1550476
正点原子完整版蓝牙资料,我的就是基于这个开发的,资料很全,方便下载。
undolog保证原子性.png
Atom-linter-solidity.zip,原子短绒固体支架棉绒硬度,atom是一个用web技术构建的开源文本编辑器。
原子闭包系统, 原子闭包算子和原子全蕴含系统,杨海建,李庆国,本文引进了原子闭包系统,原子闭包算子以及原子全蕴含系统等概念, 研究了它们之间的相互关系, 给出了由原子闭包系统来表示有限原子�
原子吸收光谱报告 一、实验原理 在使用锐线光源条件下,基态原子蒸汽对共振线的吸收,符合朗伯-比尔定律,即:A=lg(I0/I)=KLN0 在试样原子化时,火焰温度低于3000 K时,对大多数元素来讲,原子蒸汽中基态原子...
原子及原子核物理(郭江编)_课后复习资料.pdf
原子核强度电势和原子价层电量对元素电负性的标度,余德才,曹文娟,本文根据万有引力势与电势的关系式和系统的对比质电比(单位电量的质量)Sr的物理意义,定义了系统的强度电势-单位质量的电势(Sr-1/
操纵原子分子的新方法:基于宏观操纵实现原子分子宏观尺度精确分布的统一性方法,李昌海,张凤强,世界上的任何物体都是原子分子的一种空间分布,从这个意义上讲,只要能实现原子分子在任意尺度(包括宏观大尺度)上...
正点原子stm32的初级课程的ppt,共43讲,用来复习回顾挺好的