久久久久久久视色,久久电影免费精品,中文亚洲欧美乱码在线观看,在线免费播放AV片

<center id="vfaef"><input id="vfaef"><table id="vfaef"></table></input></center>

    <p id="vfaef"><kbd id="vfaef"></kbd></p>

    
    
    <pre id="vfaef"><u id="vfaef"></u></pre>

      <thead id="vfaef"><input id="vfaef"></input></thead>

    1. 站長資訊網(wǎng)
      最全最豐富的資訊網(wǎng)站

      Java 的快速失敗和安全失敗


      一、快速失?。╢ail—fast)

      在用迭代器遍歷一個集合對象時,如果遍歷過程中對集合對象的內(nèi)容進行了修改(增加、刪除、修改),則會拋出 Concurrent Modification Exception。

      原理:迭代器在遍歷時直接訪問集合中的內(nèi)容,并且在遍歷過程中使用一個 modCount 變量。集合在被遍歷期間如果內(nèi)容發(fā)生變化,就會改變 modCount 的值。每當?shù)魇褂?hashNext()/next() 遍歷下一個元素之前,都會檢測 modCount 變量是否為 expectedmodCount 值,是的話就返回遍歷;否則拋出異常,終止遍歷。

      注意:這里異常的拋出條件是檢測到 modCount != expectedmodCount 這個條件。如果集合發(fā)生變化時修改 modCount 值剛好又設置為了 expectedmodCount 值,則異常不會拋出。因此,不能依賴于這個異常是否拋出而進行并發(fā)操作的編程,這個異常只建議用于檢測并發(fā)修改的 bug。

      場景:java.util 包下的集合類都是快速失敗的,不能在多線程下發(fā)生并發(fā)修改(迭代過程中被修改)。

      二、安全失?。╢ail—safe)

      采用安全失敗機制的集合容器,在遍歷時不是直接在集合內(nèi)容上訪問的,而是先復制原有集合內(nèi)容,在拷貝的集合上進行遍歷。

      原理:由于迭代時是對原集合的拷貝進行遍歷,所以在遍歷過程中對原集合所作的修改并不能被迭代器檢測到,所以不會觸發(fā) Concurrent Modification Exception。

      >缺點:基于拷貝內(nèi)容的優(yōu)點是避免了 Concurrent Modification Exception,但同樣地,迭代器并不能訪問到修改后的內(nèi)容,即:迭代器遍歷的是開始遍歷那一刻拿到的集合拷貝,在遍歷期間原集合發(fā)生的修改迭代器是不知道的。

      場景:java.util.concurrent 包下的容器都是安全失敗,可以在多線程下并發(fā)使用,并發(fā)修改。

      原文地址:http://www.cnblogs.com/ygj0930/p/6543350.html

      贊(0)
      分享到: 更多 (0)
      網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號