package at.ac.tuwien.dsg.scaledom.util; import java.lang.ref.ReferenceQueue; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class ReferenceQueueLogThread extends Thread implements Runnable { /** Logger. */ private final static Logger log = LoggerFactory.getLogger(ReferenceQueueLogThread.class); private final ReferenceQueue<?> referenceQueue; private final String unloadMessage; /** * Default constructor. * * @param referenceQueue the reference queue to be logged. * @param unloadMessage a message to be logged, containing one placeholder such that * <code>String.format(unloadMessage, unloadedObj)</code> returns the desired log message. */ public ReferenceQueueLogThread(final ReferenceQueue<?> referenceQueue, final String unloadMessage) { this.referenceQueue = referenceQueue; this.unloadMessage = unloadMessage; } @Override public void run() { while (true) { try { final Object unloadedObj = referenceQueue.remove(); if (unloadedObj != null) { log.debug(String.format(unloadMessage, unloadedObj)); } } catch (final InterruptedException ex) { log.warn("Reference queue log thread has been unexpectedly interrupted."); } } } }