2013-11-22 8 views
7

विफल सुरक्षित इटरेटर वे हैं जो throwConcurrentModificationException नहीं हैं।सुरक्षित इटरेटर्स विफल हो जाते हैं और कमजोर संगत इटरेटर

लेकिन fail safe iterators और weakly consistent iterators के बीच क्या अंतर है?

दोनों समान हैं?

+0

http://stackoverflow.com/q/14084104/469220 – Vlad

+3

कोई भी समान नहीं है –

+1

http://stackoverflow.com/questions/14084104/concurrenthashmap-returns-a-weakly-consistent-iterator-why-should-we प्रयोग यह किसी भी –

उत्तर

8

Fail-safe और Weakly consistent इटरेटर ConcurrentModificationException फेंक नहीं देते हैं।

weakly consistent iterators: संग्रह जो कैस (तुलना और स्वैप) पर भरोसा कमजोर संगत iterators है, जो कुछ है, लेकिन दर्शाते हैं जरूरी सभी परिवर्तनों कि उनके समर्थन संग्रह करने के लिए बनाया गया है के बाद से वे बनाए गए थे की नहीं। उदाहरण के लिए, यदि संग्रह में तत्वों को संशोधित करने से पहले संशोधित किया गया है या हटा दिया गया है, तो यह निश्चित रूप से इन परिवर्तनों को प्रतिबिंबित करेगा, लेकिन सम्मिलन के लिए ऐसी कोई गारंटी नहीं दी गई है।

Fail safe iterator इटरेटर तंत्र आंतरिक संग्रह डेटा संरचना की एक प्रति बनाता है और तत्वों पर पुनरावृत्त करने के लिए इसका उपयोग करता है। अंतर्निहित डेटा संरचना में परिवर्तन होने पर यह किसी भी समवर्ती संशोधन अपवाद को फेंकने से रोकता है। बेशक, पूरे सरणी की प्रतिलिपि बनाने का ओवरहेड पेश किया गया है।

public CopyOnWriteArrayList(Collection<? extends E> c) { 
     Object[] elements = c.toArray(); 

     if (elements.getClass() != Object[].class) 
      elements = Arrays.copyOf(elements, elements.length, Object[].class); 
     setArray(elements); 
    } 

संदर्भ::

  1. Java Generics and Collections: 11.5. Collections and Thread Safety
  2. Iterators – Fail fast Vs Fail safe
  3. CopyOnWriteArrayList असफल सुरक्षित इटरेटर है, जो हम आसानी से निर्माता के स्रोत को देखकर देख सकते हैं के साथ ऐसे ही एक कार्यान्वयन है

संबंधित मुद्दे