blob: bd17867945a5bba618f134868b2354f4f34992ea [file] [log] [blame]
Yuta HIGUCHI39ede6a2014-10-03 15:23:33 -07001package org.onlab.util;
2
3import java.util.concurrent.ConcurrentHashMap;
4import java.util.concurrent.ConcurrentMap;
5
6import org.apache.commons.lang3.concurrent.ConcurrentException;
7import org.apache.commons.lang3.concurrent.ConcurrentInitializer;
8
9/**
10 * Creates an instance of new ConcurrentHashMap on each {@link #get()} call.
11 * <p>
12 * To be used with
13 * {@link org.apache.commons.lang3.concurrent.ConcurrentUtils#createIfAbsent()
14 * ConcurrentUtils#createIfAbsent}
15 *
16 * @param <K> ConcurrentHashMap key type
17 * @param <V> ConcurrentHashMap value type
18 */
19public final class NewConcurrentHashMap<K, V>
20 implements ConcurrentInitializer<ConcurrentMap<K, V>> {
21
22 public static final NewConcurrentHashMap<?, ?> INSTANCE = new NewConcurrentHashMap<>();
23
24 @SuppressWarnings("unchecked")
25 public static <K, V> NewConcurrentHashMap<K, V> ifNeeded() {
26 return (NewConcurrentHashMap<K, V>) INSTANCE;
27 }
28
29 @Override
30 public ConcurrentMap<K, V> get() throws ConcurrentException {
31 return new ConcurrentHashMap<>();
32 }
33}