Class ThreadRobustList<T>

  • All Implemented Interfaces:
    java.lang.Iterable<T>

    public class ThreadRobustList<T>
    extends java.lang.Object
    implements java.lang.Iterable<T>

    This class implements a thread-safe, lock-free list of Objects that supports multiple readers and a single writer. Because there are no locks or other memory barriers involved, there exists no happens-before relationship among calls to either methods of the ThreadRobustList. This means that there are no guarantees as to when (or even if) an item add(Object)ed becomes visible through iterator(). If visibility is required, either use explicit synchronization between reader and writer thread, or move to a different concurrent collection (e.g. CopyOnWriteArrayList).

    Because it is lock-free, the ThreadRobustList has minimal overhead to both reading and writing. The iterator offered by this class always observes the list in a consistent state, and it never throws a ConcurrentModificationException.

    The ThreadRobustList does not permit adding null items.

    The usage of ThreadRobustList has no memory consistency effects.

    Since:
    5.1.15
    Author:
    Steinar Knutsen, bratseth
    • Constructor Summary

      Constructors 
      Constructor Description
      ThreadRobustList()
      Constructs a new instance of this class with an initial capacity of 10.
      ThreadRobustList​(int initialCapacity)
      Constructs a new instance of this class with a given initial capacity.
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      void add​(T item)
      Adds an item to this list.
      boolean isEmpty()
      Returns whether or not this list is empty.
      java.util.Iterator<T> iterator()
      Returns an iterator over the items in this list.
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • Methods inherited from interface java.lang.Iterable

        forEach, spliterator
    • Constructor Detail

      • ThreadRobustList

        public ThreadRobustList()

        Constructs a new instance of this class with an initial capacity of 10.

      • ThreadRobustList

        public ThreadRobustList​(int initialCapacity)

        Constructs a new instance of this class with a given initial capacity.

        Parameters:
        initialCapacity - the initial capacity of this list
    • Method Detail

      • isEmpty

        public boolean isEmpty()

        Returns whether or not this list is empty.

        Returns:
        true if this list has zero items
      • add

        public void add​(T item)

        Adds an item to this list. As opposed to CopyOnWriteArrayList, items added to this list may become visible to iterators created before a call to this method.

        Parameters:
        item - the item to add
        Throws:
        java.lang.NullPointerException - if item is null
      • iterator

        public java.util.Iterator<T> iterator()

        Returns an iterator over the items in this list. As opposed to CopyOnWriteArrayList, this iterator may see items added to the ThreadRobustList even if they occur after a call to this method.

        The returned iterator does not support remove().

        Specified by:
        iterator in interface java.lang.Iterable<T>
        Returns:
        an iterator over this list