blob: 85a912a3c8f4a25a0b2c4c0f4db99e7999a9abcf [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
Yuta HIGUCHI39ede6a2014-10-03 15:23:33 -07006import org.apache.commons.lang3.concurrent.ConcurrentInitializer;
7
8/**
9 * Creates an instance of new ConcurrentHashMap on each {@link #get()} call.
10 * <p>
11 * To be used with
12 * {@link org.apache.commons.lang3.concurrent.ConcurrentUtils#createIfAbsent()
13 * ConcurrentUtils#createIfAbsent}
14 *
15 * @param <K> ConcurrentHashMap key type
16 * @param <V> ConcurrentHashMap value type
17 */
18public final class NewConcurrentHashMap<K, V>
19 implements ConcurrentInitializer<ConcurrentMap<K, V>> {
20
21 public static final NewConcurrentHashMap<?, ?> INSTANCE = new NewConcurrentHashMap<>();
22
23 @SuppressWarnings("unchecked")
24 public static <K, V> NewConcurrentHashMap<K, V> ifNeeded() {
25 return (NewConcurrentHashMap<K, V>) INSTANCE;
26 }
27
28 @Override
Yuta HIGUCHIe66d10e2014-10-14 16:06:13 -070029 public ConcurrentMap<K, V> get() {
Yuta HIGUCHI39ede6a2014-10-03 15:23:33 -070030 return new ConcurrentHashMap<>();
31 }
32}