所谓失败的原子性,就是在一个方法失败之后,使对象保持“它在被调用之前的状态”。因为,尤其是CheckedException发生后,一般是希望程序可以从异常中恢复过来的。
那么如何才能保持对象的状态呢?最简单的方法就是使用非可变类型的对象(见【第13条】)。因为无论什么时候,非可变类的状态都是不可改变的。
对于可变对象,常见的方法是在对其进行处理之前,先做参数有效性的检查(见【第23条】),如果参数有问题,马上就先抛出一个异常。这时候对象的状态还未改变。
另一种方法是,将处理的过程调整一下顺序,让可能抛出异常的处理写在前面,而会改变对象状态的处理写在后面。
还有一种不太常用的方法,是编写一段恢复代码,发生失败时,可以使对象回滚到操作开始之前的状态。
最后一种方法是,在对象的一份临时拷贝上执行操作,当操作正确结束后,再把临时拷贝中的结果复制给原来的对象。如果一旦失败,不进行这个复制,也就保持了原对象的状态。
总之,作为方法规范的一部分,任何一个异常都不应该改变对象调用该方法之前的状态。
【Effective Java 学习笔记】系列连载专题请见:
http://tonylian.iteye.com/categories/64208
分享到:
相关推荐
原子性是ACID(原子性、一致性、隔离性、持久性)事务特性之一,它保证了数据库操作要么全部完成,要么全部不完成,避免了部分执行的情况。以下将详细探讨如何在数据库同步过程中保证目的端交易提交的原子性。 首先...
深入理解并发可见性、有序性、原子性与JMM内存模型深入理解并发可见性、有序性、原子性与JMM内存模型深入理解并发可见性、有序性、原子性与JMM内存模型深入理解并发可见性、有序性、原子性与JMM内存模型深入理解并发...
在分布式系统中,为了保证数据的一致性和安全性,分布式锁是一种常见的解决方案。Redis作为一个高性能的键值存储系统,常被用作实现分布式锁的工具。本文将深入探讨如何使用Redis实现分布式锁,以及如何利用自旋式...
"并发二:原子性、可见性、有序性" 本文主要讲解了Java内存模型(JMM)中关于并发编程的三个基本概念:原子性、可见性和有序性。 原子性 原子性是指一个操作不会被线程调度机制打断,一旦开始,就一直运行到结束...
在Java并发编程中,原子性和可见性是两个关键的概念,它们直接影响着多线程环境下的程序行为和数据一致性。理解这两个概念对于编写高效且线程安全的代码至关重要。 首先,让我们详细探讨一下原子性。原子性指的是一...
Java多线程编程中,原子性、可见性和有序性是三个关键的概念,它们确保了多线程环境下的正确性。 1. 原子性(Atomicity) 原子性指的是一个操作不可被中断,要么全部执行,要么完全不执行。在Java中,非原生类型的...
### STM32串口变量的原子操作问题详解 #### 一、问题背景及描述 在进行STM32单片机的串口通信开发过程中,可能会遇到串口数据帧丢失的问题。这种现象通常表现为:尽管串口接收到了完整的数据包(如512个字节或1024...
多电子原子的复杂性在于电子间的相互作用以及电子与原子核之间的相互作用。由于电子间的排斥力,多电子原子的电子排布遵循泡利不相容原理和洪特规则。泡利不相容原理指出,一个原子轨道最多只能容纳两个自旋相反的...
原子经济性是化学反应设计中的一个核心原则,它由美国斯坦福大学的B.M. Trost教授在1991年提出。这个概念强调在化学反应中,应该尽可能高效地利用所有原料分子的原子,使得它们全部转化为目标产物,从而减少副产物的...
#### 第四章:原子的精细结构 **4.1 原子中电子轨道运动的磁矩** 电子在原子轨道上的运动会产生磁矩。这一现象与电子的角动量有关,磁矩的方向由角动量方向决定。通过考虑电子轨道运动的磁矩,可以更准确地描述...
本研究支持原子核指导原子的电子结构的挑衅性思想。 随着原子序数的增加,化学元素的原子摩尔体积演化服从原子的电子结构规则,与此同时,中子多余的加到原子核上的同时发生了镜面演化。 诸如d嵌段过渡金属的原子...
本章将通过“有福同享,有难同当—原子性”这一主题,深入探讨并发编程中的核心概念——原子性,以及与之相关的线程安全和并发编程的三大特性。 并发编程的三大特性包括原子性、可见性和有序性。这些特性是理解和...
首先,"4.doc"可能是一份试题文档,其中包含了关于原子结构的基础问题,例如:如何解释氢原子的稳定性和能级分布?这涉及到尼尔斯·玻尔的原子模型,该模型通过引入量子化的能量状态成功解释了氢原子光谱的线性分布...
同时,它还有助于保持解的稀疏性,即尽可能少的原子来表示信号。 四、应用场景 1. 数据压缩:OMP可用于图像、音频等高维数据的压缩,通过找到信号的稀疏表示,以较少的参数存储大量信息。 2. 噪声抑制:在信号...
在IT行业中,线程安全是多线程编程中的一个重要概念,确保多个线程并发执行时,数据的正确性和完整性不会受到影响。线程安全通常通过同步机制来实现,其中包括原子操作和锁机制。本文将深入探讨易语言中的原子锁与...
多线程:可见性、有序性、原子性.xmind
《原子物理答案 褚圣麟》是一份包含原子物理学所有习题答案的资源,适合正在学习原子物理的学生或教师使用。这份资料提供了详细的解答,能够帮助读者深入理解和掌握原子物理学的基本概念、理论以及计算方法。 原子...
VASP (Vienna Ab initio Simulation Package) 是一种广泛应用于材料科学领域的第一性原理计算软件,它能够通过密度泛函理论 (DFT) 来模拟固体、液体以及分子系统。在使用VASP进行表面或界面性质的研究时,常常需要...
分布式Redis原子操作示例,近期项目中遇到分布式项目中多节点大并发操作redis同一个key。此案例利用java调用LUA脚本实现redis操作的原子性。分享出来大家参考。