java concurrency java.util.concurrent

¿Existe BlockingMap como BlockingQueue en java?



concurrency java.util.concurrent (3)

Aquí hay una implementación extremadamente simple utilizando BlockingQueue y ConcurrentHashMap:

public class BlockingMap<K, V> { private Map<K, ArrayBlockingQueue<V>> map = new ConcurrentHashMap<>(); private BlockingQueue<V> getQueue(K key, boolean replace) { return map.compute(key, (k, v) -> replace || v == null ? new ArrayBlockingQueue<>(1) : v); } public void put(K key, V value) { getQueue(key, true).add(value); } public V get(K key) throws InterruptedException { return getQueue(key, false).take(); } public V get(K key, long timeout, TimeUnit unit) throws InterruptedException { return getQueue(key, false).poll(timeout, unit); } }

Me gustaría tener una estructura de datos de BlockingMap que sea muy similar a BlockingQueue. El método de toma de BlockingQueue esperará allí hasta que el elemento esté disponible. ¿Me gustaría que el método de obtención de BlockingMap esperara hasta que la clave correspondiente esté disponible? ¿Está disponible este tipo de estructura de datos que puedo usar?


Espero que this sea ​​lo que quieres.

public class BlockingHashMap<K,V> extends java.lang.Object implements BlockingMap<K,V>

obtener

public V get(java.lang.Object key)

Devuelve el valor al que se asigna la clave especificada, o nulo si este mapa no contiene ninguna asignación para la clave. Tenga en cuenta que nulo se utiliza como un marcador especial para indicar la ausencia de la clave solicitada

Especificado por:

get in interface java.util.Map<K,V>

Especificado por:

get in interface BlockingMap<K,V>

Parámetros:

key - the key whose associated value is to be returned

Devoluciones:

the value to which the specified key is mapped, or null if this map contains no mapping for the key

Tiros

java.lang.ClassCastException - if the key is of an inappropriate type for this map java.lang.NullPointerException - if the specified key is null and this map does not permit null keys (optional) java.lang.IllegalStateException - if the map has been shut-down


Simplemente he usado BlockingQueue<Map.Entry<K,V>> en el pasado. Pero recientemente, me encontré con este mapa de bloqueo para Java . Aunque no lo he usado yo mismo.