1 package ca.uhn.hl7v2.concurrent; 2 3 import java.util.Map; 4 import java.util.concurrent.Future; 5 import java.util.concurrent.TimeUnit; 6 7 public interface BlockingMap<K, V> extends Map<K, V> { 8 9 /** 10 * Adds an entry only if there's already a consumer waiting for the value. 11 * 12 * @param key key for the entry to be added 13 * @param value entry to be added 14 * @return true if entry was added and a consumer is already waiting for the 15 * value, false otherwise 16 */ 17 boolean give(K key, V value); 18 19 /** 20 * Waits for an entry for the given key and returns the associated value. 21 * May return null if the producer withdraws the entry without providing a 22 * value. 23 * 24 * @param key key for the entry 25 * @return the value of the entry 26 * @throws InterruptedException 27 */ 28 V take(K key) throws InterruptedException; 29 30 /** 31 * Waits for an entry in a background thread. 32 * 33 * @param key key for the entry 34 * @return Future the result 35 */ 36 Future<V> asyncTake(K key); 37 38 /** 39 * Waits for the specified amount of time for an entry with the given key 40 * and returns the associated value. Returns null if no value was provided 41 * within the poll time. May return null if the producer withdraws the entry 42 * without providing a value. 43 * 44 * @param key key for the entry 45 * @param timeout timeout before the methods returns 46 * @param unit time unit used in conjunction with timout 47 * @return the value of the entry 48 * @throws InterruptedException 49 */ 50 V poll(K key, long timeout, TimeUnit unit) throws InterruptedException; 51 52 /** 53 * Polls for an entry in a background thread. 54 * 55 * @param key key for the entry 56 * @return Future the result 57 */ 58 Future<V> asyncPoll(K key, long timeout, TimeUnit unit); 59 } 60