9.64 尽力保证异常失败的原子性
异常失败的原子性指如果调用对象的方法抛出了异常,那么此对象的状态应与抛出异常前相同。即对象状态不因为抛出异常而改变,只有这样,调用者才可能在捕获异常后进行恢复。
?
保证异常失败的原子性可能的方式包括:
1.执行运算前(这里指执行能够修改对象状态的运算)先检查条件,如检查输入参数值,对象属性。如果不满足条件则触发异常。
?
2.如果不能检查运算条件,那么应该执行可能触发异常的运算,再执行需要修改对象状态的运算
?
3.在异常触发后执行修复代码,适用于基于硬盘的数据操作,如文件和数据库
?
4.复制对象并对其进行运算,如果触发异常不会影响原对象。适用于复制对象不会明显降低性能或增加内存占用的情况(一般来说复制对象可以提高运算速度,但是会增加内存占用)
?
如果不能保证异常失败的原子性,那么应在注释里详细说明。一般在多线程的情况下,较难保证异常失败的原子性
?
?