package com.basic.security.utils; import java.util.List; import java.util.Vector; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; public class ConcurrentList { public final Lock lock = new ReentrantLock(); public long setTime = 0; public List list = new Vector(); public boolean isEmpty() { try { lock.lock(); if (list.size() > 0) { return false; } else { return true; } } catch (Exception e) { e.printStackTrace(); } finally { lock.unlock(); } return true; } public Object getFirst() { try { lock.lock(); if (list.size() > 0) { return list.get(0); } else { return null; } } catch (Exception e) { e.printStackTrace(); } finally { lock.unlock(); } return null; } public void setFirst(Object object) { try { lock.lock(); if (list.size() == 0) { list.add(object); setTime = System.currentTimeMillis(); } } catch (Exception e) { e.printStackTrace(); } finally { lock.unlock(); } } public Object getFirst(long timeout) { try { lock.lock(); if (list.size() > 0) { if (System.currentTimeMillis() - setTime < timeout) { return list.get(0); } } else { return null; } } catch (Exception e) { e.printStackTrace(); } finally { lock.unlock(); } return null; } public void removeFirst() { try { lock.lock(); if (list.size() > 0) { list.remove(0); setTime = System.currentTimeMillis(); } } catch (Exception e) { e.printStackTrace(); } finally { lock.unlock(); } } }