CopyOnWriteArrayList เป็นตัวแปรชุดเธรดที่ปลอดภัยของ ArrayList ซึ่งการดำเนินการเปลี่ยนแปลงทั้งหมด (เพิ่มตั้งค่าและอื่น ๆ ) ถูกนำไปใช้โดยการสร้างสำเนาใหม่ของอาร์เรย์ต้นแบบ
CopyOnWriteArrayList เป็นทางเลือกที่เกิดขึ้นพร้อมกันของการทำข้อมูลให้ตรงกันโดยใช้ List List Interface และเป็นส่วนหนึ่งของ java.util.concurrent package และชุดของเธรดที่ปลอดภัย
public class CopyOnWriteArrayList<E>
implements List<E>, RandomAccess, Cloneable, java.io.Serializable
CopyOnWriteArrayList ไม่ปลอดภัยและไม่ทิ้ง ConcurrentModificationException เมื่อต้นแบบ CopyOnWriteArrayList พื้นฐานได้รับการแก้ไขในระหว่างการทำซ้ำใช้ ArrayList แยกต่างหาก
โดยทั่วไปแล้วค่าใช้จ่ายสูงเกินไปเนื่องจากอาเรย์การคัดลอกเกี่ยวข้องกับการดำเนินการอัปเดตทุกครั้งที่คัดลอกโคลนจะถูกสร้างขึ้น CopyOnWriteArrayList เป็นตัวเลือกที่ดีที่สุดสำหรับการอ่านเป็นประจำเท่านั้น
/**
* Returns a shallow copy of this list. (The elements themselves
* are not copied.)
*
* @return a clone of this list
*/
public Object clone() {
try {
@SuppressWarnings("unchecked")
CopyOnWriteArrayList<E> clone =
(CopyOnWriteArrayList<E>) super.clone();
clone.resetLock();
return clone;
} catch (CloneNotSupportedException e) {
// this shouldn't happen, since we are Cloneable
throw new InternalError();
}
}