/** * Remove garbage collected entries. */ protected final void expungeStaleEntries() { WeakEntry<V> entry; while((entry=(WeakEntry<V>)queue.poll())!=null) { // System.out.println("removing: "+entry); contents.remove(entry.getArgument()); } }
/** * Remove an element from the queue. * @return A weak entry. */ public Reference remove() throws InterruptedException { WeakEntry ret = (WeakEntry)super.remove(); ((Runnable)ret.getArgument()).run(); entries.remove(ret); return ret; }
/** * Remove an element from the queue. * @return A weak entry. */ public Reference remove(long timeout) throws IllegalArgumentException ,InterruptedException { WeakEntry ret = (WeakEntry)super.remove(timeout); ((Runnable)ret.getArgument()).run(); entries.remove(ret); return ret; }
/** * Poll a stale entry. * @return A weak entry or null (if none is stale). */ public Reference poll() { WeakEntry ret = (WeakEntry)super.poll(); if(ret!=null) { // System.out.println("Found we: "+ret); ((Runnable)ret.getArgument()).run(); entries.remove(ret); } return ret; }
/** * Remove an entry. */ public Runnable removeEntry(Object obj) { if(obj==null) throw new IllegalArgumentException("Must not be null."); // todo: can this be done more efficiently? WeakEntry find = new WeakEntry(obj, null); WeakEntry ret = null; for(int i=0; i<entries.size(); i++) { Object tmp = entries.get(i); if(tmp.equals(find)) { ret = (WeakEntry)tmp; entries.remove(i); break; } } //entries.remove(ret); return ret!=null? (Runnable)ret.getArgument(): null; }
/** * Expunge stale objects. */ public void expungeStaleObjects() { WeakEntry entry; while((entry = (WeakEntry)queue.poll()) !=null) { OAVInternalObjectId id = (OAVInternalObjectId)entry.getArgument(); eventhandler.objectRemoved(id.getPhantomExternalId(), getType(id.getPhantomExternalId())); objects.remove(id); types.remove(id); // System.out.println("Removed: "+id); } }
/** * Expunge stale objects. */ public void expungeStaleObjects() { WeakEntry entry; while((entry = (WeakEntry)queue.poll()) !=null) { OAVInternalObjectId id = (OAVInternalObjectId)entry.getArgument(); eventhandler.objectRemoved(id.getPhantomExternalId(), getType(id.getPhantomExternalId())); objects.remove(id); types.remove(id); // System.out.println("Removed: "+id); } }