java जावा में विभिन्न प्रकार के थ्रेड-सुरक्षित सेट्स




1 Answers

AtomicReference<Set> और प्रत्येक संशोधन पर पूरे सेट को प्रतिस्थापित करके CopyOnWriteArraySet की समवर्ती-संबंधित गुणों के साथ CopyOnWriteArraySet के contains() प्रदर्शन को जोड़ना संभव है।

कार्यान्वयन स्केच:

public abstract class CopyOnWriteSet<E> implements Set<E> {

    private final AtomicReference<Set<E>> ref;

    protected CopyOnWriteSet( Collection<? extends E> c ) {
        ref = new AtomicReference<Set<E>>( new HashSet<E>( c ) );
    }

    @Override
    public boolean contains( Object o ) {
        return ref.get().contains( o );
    }

    @Override
    public boolean add( E e ) {
        while ( true ) {
            Set<E> current = ref.get();
            if ( current.contains( e ) ) {
                return false;
            }
            Set<E> modified = new HashSet<E>( current );
            modified.add( e );
            if ( ref.compareAndSet( current, modified ) ) {
                return true;
            }
        }
    }

    @Override
    public boolean remove( Object o ) {
        while ( true ) {
            Set<E> current = ref.get();
            if ( !current.contains( o ) ) {
                return false;
            }
            Set<E> modified = new HashSet<E>( current );
            modified.remove( o );
            if ( ref.compareAndSet( current, modified ) ) {
                return true;
            }
        }
    }

}
java concurrency set

जावा में थ्रेड-सुरक्षित सेट जेनरेट करने के कई सारे कार्यान्वयन और तरीके प्रतीत होते हैं। कुछ उदाहरणों में शामिल हैं

1) CopyOnWriteArraySet

2) संग्रह। सिंक्रनाइज़सेटसेट (सेट सेट)

3) ConcurrentSkipListSet

4) संग्रह। NewewetFromMap (नया ConcurrentHashMap ())

5) अन्य सेट्स इसी तरह से उत्पन्न होते हैं (4)

ये उदाहरण Concurrency पैटर्न से आते हैं : जावा 6 में समवर्ती सेट कार्यान्वयन

क्या कोई इन उदाहरणों और दूसरों के मतभेदों, फायदों और नुकसान को आसानी से समझा सकता है? मुझे जावा स्टड डॉक्स से सीधे सब कुछ समझने और रखने में परेशानी हो रही है।




Related