package br.com.etyllica.util.concurrency; import java.util.ArrayList; import java.util.List; public class ConcurrentList<T> { private List<T> list; private List<T> alternativeList; private boolean locked = false; public ConcurrentList(int initialSize) { super(); list = new ArrayList<T>(initialSize); alternativeList = new ArrayList<T>(initialSize); } public ConcurrentList() { super(); list = new ArrayList<T>(); alternativeList = new ArrayList<T>(); } public void add(T t) { if(!locked) { list.add(t); } else { alternativeList.add(t); } } public List<T> lock() { alternativeList.clear(); locked = true; return list; } public void unlock() { list.clear(); if (!alternativeList.isEmpty()) { list.addAll(alternativeList); } locked = false; } public List<T> getList() { return list; } public void clear() { list.clear(); } public boolean isEmpty() { return list.isEmpty() && alternativeList.isEmpty(); } public void removeAll(List<T> removeList) { if(!locked) { for(T t: removeList) { list.remove(t); } } } }