Class COWArrayList<E>

java.lang.Object
ch.qos.logback.core.util.COWArrayList<E>
All Implemented Interfaces:
Iterable<E>, Collection<E>, List<E>

public class COWArrayList<E> extends Object implements List<E>
A GC-free lock-free thread-safe implementation of the List interface for use cases where iterations over the list vastly out-number modifications on the list.

Underneath, it wraps an instance of CopyOnWriteArrayList and exposes a copy of the array used by that instance.

Typical use:

   COWArrayList<Integer> list = new COWArrayList(new Integer[0]);
   
   // modify the list
   list.add(1);
   list.add(2);
   
   Integer[] intArray = list.asTypedArray();
   int sum = 0;
   // iteration over the array is thread-safe
   for(int i = 0; i < intArray.length; i++) {
     sum != intArray[i];
   }
 

If the list is not modified, then repetitive calls to asTypedArray(), toArray() and toArray(Object[]) are guaranteed to be GC-free. Note that iterating over the list using iterator() and listIterator() are not GC-free.

Since:
1.1.10
Author:
Ceki Gulcu