CopyOnWriteArrayList
การดำเนินการเพิ่ม , ตั้งค่า , ลบ ใน คอลเล็กชันที่กำหนดส่งผลให้มีการสร้างสำเนาใหม่ของอาร์เรย์ภายใน สิ่งนี้ทำให้มั่นใจได้ว่า เราจะไม่พบConcurrentModificationException
โปรดจำไว้ว่าเมื่อคัดลอกอาร์เรย์ เฉพาะการอ้างอิงถึงวัตถุเท่านั้นที่จะถูกคัดลอก รวมถึงการเข้าถึงฟิลด์ขององค์ประกอบที่ไม่ปลอดภัยสำหรับเธรด คอลเล็กชันดังกล่าวใช้ดีที่สุดในกรณีที่มีจำนวนการดำเนินการเขียนขั้นต่ำ
CopyOnWriteArrayList<E>เป็นอะนาล็อกที่ปลอดภัยสำหรับเธรดของ ArrayListซึ่งใช้งานบนพื้นฐานของอัลกอริทึม CopyOnWrite วิธีการเพิ่มเติมและคอนสตรัคอธิบายด้านล่าง:
| CopyOnWriteArrayList(E[] toCopyIn) | ตัวสร้างที่ใช้อาร์เรย์เป็นอินพุต |
| int indexOf(E อี ดัชนี int) | ส่งกลับดัชนีขององค์ประกอบแรกที่พบ โดยเริ่มต้นที่ดัชนีที่กำหนด |
| int lastIndexOf(E อี ดัชนี int) | ส่งกลับดัชนีขององค์ประกอบแรกที่พบในการค้นหาแบบย้อนกลับ โดยเริ่มต้นที่ดัชนีที่กำหนด |
| บูลีน addIfAbsent(E อี) | เพิ่มองค์ประกอบหากไม่ได้อยู่ในคอลเลกชัน ใช้วิธีเท่ากับ เพื่อเปรียบเทียบ องค์ประกอบ |
| int addAllAbsent (คอลเลกชัน <? ขยาย E> c) | เพิ่มองค์ประกอบหากไม่ได้อยู่ในคอลเลกชัน ส่งกลับจำนวนองค์ประกอบที่เพิ่ม |
อินเทอร์เฟซ ConcurrentMap
ปรับปรุงการใช้งานHashMapและTreeMapด้วยการสนับสนุนมัลติเธรดและความสามารถในการปรับขนาด
ConcurrentMap<K, V>เป็นอินเทอร์เฟซที่ขยายแผนที่ด้วยการดำเนินการอะตอมมิกเพิ่มเติม
| V putIfAbsent(คีย์ K, ค่า V) | เพิ่มคู่คีย์-ค่าใหม่เฉพาะในกรณีที่คีย์ไม่ได้อยู่ในคอลเล็กชัน ส่งกลับค่าก่อนหน้าสำหรับคีย์ที่กำหนด |
| บูลีนลบ (คีย์วัตถุ, ค่าวัตถุ) | ลบคู่คีย์-ค่าเฉพาะเมื่อคีย์ที่กำหนดตรงกับค่าที่กำหนดในแผนที่ คืนค่าจริงหากลบองค์ประกอบสำเร็จ |
| บูลีนแทนที่ (คีย์ K, V oldValue, V newValue) | แทนที่ค่าเก่าด้วยค่าใหม่โดยคีย์ก็ต่อเมื่อค่าเก่าตรงกับค่าที่กำหนดในแผนที่เท่านั้น คืนค่าจริงหากค่าถูกแทนที่ด้วยค่าใหม่ |
| V แทนที่ (คีย์ K, ค่า V) | แทนที่ค่าเก่าด้วยค่าใหม่ด้วยคีย์เฉพาะเมื่อคีย์เชื่อมโยงกับค่าใดๆ ส่งกลับค่าก่อนหน้าสำหรับคีย์ที่กำหนด |
ConcurrentHashMap<K, V> - ที่นี่ข้อมูลจะถูกนำเสนอในรูปแบบของกลุ่มซึ่งแบ่งออกเป็นคีย์แฮช ดังนั้น ถ้าคุณต้องการเข้าถึง เซ็กเมนต์จะถูกล็อก ไม่ใช่อ็อบเจ็กต์ ตัววนซ้ำไม่โยน ConcurrentModificationExceptionและแสดงข้อมูลในช่วงเวลาหนึ่ง
การใช้งาน ConcurrentHashMap
ConcurrentHashMap<K, V> - ที่นี่ข้อมูลจะถูกนำเสนอในรูปแบบของเซ็กเมนต์ แบ่งตามคีย์แฮช ด้วยเหตุนี้ การเข้าถึงข้อมูลจึงถูกล็อคตามกลุ่ม ไม่ใช่โดยวัตถุเดียว นอกจากนี้ ตัววนซ้ำจะแสดงข้อมูลสำหรับช่วงเวลาหนึ่ง ๆและไม่โยน ConcurrentModificationException
ConcurrentNavigableMap<K,V> - ขยายเท อร์เฟ ซ NavigableMapและส่งคืน ConcurrentNavigableMap ตัววนซ้ำทั้งหมดใช้งานได้อย่างปลอดภัยและห้ามทิ้ง ConcurrentModificationException
ConcurrentSkipListMap<K, V>เป็นอะนาล็อกของ TreeMapสำหรับการทำงานแบบมัลติเธรด ข้อมูลถูกจัดเรียงตามคีย์และประสิทธิภาพการบันทึกเฉลี่ย (N) รับประกันสำหรับcontainerKey,get,put,removeและการดำเนินการอื่นๆ ที่คล้ายกัน
ConcurrentSkipListSet<E>เป็นการใช้งานเท อร์เฟ ซ Setตาม ConcurrentSkipListMap
GO TO FULL VERSION