/** * */ package com.trendrr.oss.concurrent; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; /** * Provides a safe way to wait on a value to be set. * * from the guava wiki. * * The box holds exactly one value at a time * * * * @author Dustin Norlander * @created May 23, 2012 * */ public class SafeBox<V> { protected static Log log = LogFactory.getLog(SafeBox.class); private V value = null; public synchronized V getAndClear() throws InterruptedException { while (value == null) { wait(); } V result = value; value = null; notify(); return result; } public synchronized void set(V newValue) throws InterruptedException { while (value != null) { wait(); } value = newValue; notify(); } }