package com.jdon.util; import java.util.LinkedList; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantReadWriteLock; public class ConcurrentLinkedList { private final ReentrantReadWriteLock readWriteLock = new ReentrantReadWriteLock( true); private final Lock readLock = readWriteLock.readLock(); private final Lock writeLock = readWriteLock.writeLock(); /** A list of the elements order by Least Recent Use */ public final LinkedList keyLRUList = new LinkedList(); public void add(Object o) { writeLock.lock(); try { keyLRUList.add(o); } finally { writeLock.unlock(); } } public void addFirst(Object key) { writeLock.lock(); try { keyLRUList.addFirst(key); } finally { writeLock.unlock(); } } public void moveFirst(Object key) { writeLock.lock(); try { keyLRUList.remove(key); keyLRUList.addFirst(key); } catch (Exception e) { } finally { writeLock.unlock(); } } public Object getLast() { readLock.lock(); try { return keyLRUList.getLast(); } finally { readLock.unlock(); } } public int size() { readLock.lock(); try { return keyLRUList.size(); } finally { readLock.unlock(); } } public void remove(Object key) { readLock.lock(); try { keyLRUList.remove(key); } finally { readLock.unlock(); } } public void clear() { writeLock.lock(); try { keyLRUList.clear(); } finally { writeLock.unlock(); } } }