TOP

【Java深入研究】4、fail-fast机制(一)
2017-10-13 10:03:49 】 浏览:5909次 本网站的内容取自网络,仅供学习参考之用,绝无侵犯任何人知识产权之意。如有侵犯请您及时与本人取得联系,万分感谢。
Tags:Java 深入 研究 fail-fast 机制

在JDK的Collection中我们时常会看到类似于这样的话:

        例如,ArrayList:

注意,迭代器的快速失败行为无法得到保证,因为一般来说,不可能对是否出现不同步并发修改做出任何硬性保证。快速失败迭代器会尽最大努力抛出 ConcurrentModificationException。因此,为提高这类迭代器的正确性而编写一个依赖于此异常的程序是错误的做法:迭代器的快速失败行为应该仅用于检测 bug。

        HashMap中:

注意,迭代器的快速失败行为不能得到保证,一般来说,存在非同步的并发修改时,不可能作出任何坚决的保证。快速失败迭代器尽最大努力抛出 ConcurrentModificationException。因此,编写依赖于此异常的程序的做法是错误的,正确做法是:迭代器的快速失败行为应该仅用于检测程序错误。

        在这两段话中反复地提到”快速失败”。那么何为”快速失败”机制呢?

        “快速失败”也就是fail-fast,它是Java集合的一种错误检测机制。当多个线程对集合进行结构上的改变的操作时,有可能会产生fail-fast机制。记住是有可能,而不是一定。例如:假设存在两个线程(线程1、线程2),线程1通过Iterator在遍历集合A中的元素,在某个时候线程2修改了集合A的结构(是结构上面的修改,而不是简单的修改集合元素的内容),那么这个时候程序就会抛出 ConcurrentModificationException 异常,从而产生fail-fast机制。

一、fail-fast示例

[java]  view plain  copy
 
  1. public class FailFastTest {  
  2.     private static List<Integer> list = new ArrayList<>();  
  3.       
  4.     /** 
  5.      * @desc:线程one迭代list 
  6.      * @Project:test 
  7.      * @file:FailFastTest.java 
  8.      * @Authro:chenssy 
  9.      * @data:2014年7月26日 
  10.      */  
  11.     private static class threadOne extends Thread{  
  12.         public void run() {  
  13.             Iterator<Integer> iterator = list.iterator();  
  14.             while(iterator.hasNext()){  
  15.                 int i = iterator.next();  
  16.                 System.out.println("ThreadOne 遍历:" + i);  
  17.                 try {  
  18.                     Thread.sleep(10);  
  19.                 } catch (InterruptedException e) {  
  20.                     e.printStackTrace();  
  21.                 }  
  22.             }  
  23. &n

    请关注公众号获取更多资料


    【Java深入研究】4、fail-fast机制(一) https://www.cppentry.com/bencandy.php?fid=76&id=157871

首页 上一页 1 2 3 4 5 6 7 下一页 尾页 1/7/7
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇【Java深入研究】4、fail-fast机制 下一篇【Java基础】4、java中的内部类

评论

验 证 码:
表  情:
内  容: