java - Mengapa kaedah get() dalam ConcurrentHashMap tidak boleh dikunci?
漂亮男人
漂亮男人 2017-05-17 10:00:31
0
1
792
public V get(Object key) { Segment s; // manually integrate access methods to reduce overhead HashEntry[] tab; int h = hash(key); long u = (((h >>> segmentShift) & segmentMask) << SSHIFT) + SBASE; if ((s = (Segment)UNSAFE.getObjectVolatile(segments, u)) != null && (tab = s.table) != null) { for (HashEntry e = (HashEntry) UNSAFE.getObjectVolatile (tab, ((long)(((tab.length - 1) & h)) << TSHIFT) + TBASE); e != null; e = e.next) { K k; if ((k = e.key) == key || (e.hash == h && key.equals(k))) return e.value; } } return null; }

Mengapa Vector's get memerlukan penguncian yang disegerakkan tetapi ConcurrentHashMap tidak? Selain itu, CopyOnWriteArrayList juga menggunakan copy-on-write untuk mencapai bacaan dan penulisan selari. Jelas sekali, ConcrrentHashMap tidak melaksanakan copy-on-write. Bagaimanakah ia memastikan keadaan perantaraan yang tidak konsisten tidak akan dibaca semasa membaca dan menulis selari.

漂亮男人
漂亮男人

membalas semua (1)
PHPzhong

Artikel ini menerangkannya dengan sangat baik

    Muat turun terkini
    Lagi>
    kesan web
    Kod sumber laman web
    Bahan laman web
    Templat hujung hadapan
    Tentang kita Penafian Sitemap
    Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!