java中的fail-fast(快速失敗)機制__java

來源:互聯網
上載者:User
引入 在前面介紹 ArrayList的擴容問題時對於modCount的操作沒有詳細說明,該變數的操作在add,remove等操作中都會發生改變。那麼該變數到底有什麼作用呢。 簡介 fail-fast 機制,即快速失敗機制,是java集合(Collection)中的一種錯誤偵測機制。當在迭代集合的過程中該集合在結構上發生改變的時候,就有可能會發生fail-fast,即拋出 ConcurrentModificationException異常。fail-fast機制並不保證在不同步的修改下一定會拋出異常,它只是盡最大努力去拋出,所以這種機制一般僅用於檢測bug。 fail-fast的出現情境 在我們常見的java集合中就可能出現fail-fast機制,比如ArrayList,HashMap。在多線程和單線程環境下都有可能出現快速失敗。 1、單線程環境下的fail-fast: ArrayList發生fail-fast例子: [java]  view plain  copy public static void main(String[] args) {         List<String> list = new ArrayList<>();         for (int i = 0 ; i < 10 ; i++ ) {              list.add(i + "");         }         Iterator<String> iterator = list.iterator();         int i = 0 ;         while(iterator.hasNext()) {              if (i == 3) {                   list.remove(3);              }              System.out.println(iterator.next());              i ++;         }   } 該段代碼定義了一個Arraylist集合,並使用迭代器遍曆,在遍曆過程中,刻意在某一步迭代中remove一個元素,這個時候,就會發生fail-fast。
HashMap發生fail-fast: [java]  view plain  copy public static void main(String[] args) {         Map<String, String> map = new HashMap<>();         for (int i = 0 ; i < 10 ; i ++ ) {              map.put(i+"", i+"");         }         Iterator<Entry<String, String>> it = map.entrySet().iterator();         int i = 0;         while (it.hasNext()) {              if (i == 3) {                   map.remove(3+"");              }              Entry<String, String> entry = it.next();              System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue());              i++;      }   }   該段代碼定義了一個hashmap對象並存放了10個索引值對,在迭代遍曆過程中,使用map的remove方法移除了一個元素,導致拋出了 ConcurrentModificationException異常:
2、多線程環境下: [java]  view plain  copy public class FailFastTest {        public static List<String> list = new ArrayList<>();     

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.