【fail-fast和fail-safe】

fail-fast和fail-safe

  • 什么是fail-fast?什么是fail-safe?

什么是fail-fast?什么是fail-safe?

在系统设计中,快速失效(fail-fast)系统是一种可以立即报告任何可能表明故障的情况的系统。快速失效系统通常设计用于停止正常操作,而不是试图继续可能存在缺陷的过程。
其实,这只是一种理念罢了,说白了就是在做系统设计的时间先考虑异常情况,一旦发生异常,直接噶(停止)并上报。
举一个最简单的fail-fast的例子:

public int divide(int dividend,int divisor) {
    if(divisor == 0) {
        thow new RuntimeException("divisor can't be zero");
    }
    return dividend/divisor;
}

上面的代码是一个对两个整数做除法的方法,在divide方法中,对除数做了一个简单的检查。如果它的值为0,那么就让它直接抛出一个异常信息,并明确表示异常的原因。这其实就是fail-fast理念的实际应用。

这样子做的好处就是可以预先识别出一些的错误情况,一方面可以避免执行复杂的其它代码,另一方面,这种情况被识别后也可以针对性的做一些单独的处理。

在Java中,集合类中有用到fail-fast机制进行设计,一旦使用不当,出发fail-fast机制设计的代码,就会发生非预期情况。

在集合类中,为了避免并发修改,会维护一个expectedModCount属性,他表示这个迭代器预期该集合被修改的次数。还有一个modCount和expectedModCount的值,如果不一致的话,则会触发fail-fast机制,抛出ConcurrentModificationException。

fail-fast机制是为线程安全的集合做准备的,可以避免像fail-fast一样在并发使用集合的时候,不断地抛出异常信息。

你可能感兴趣的:(Java集合类,java)