Google collections Library の MapMaker は多くの課題を解決してくれる気がする。
ConcurrentMap<String,String> map = new MapMaker()
.concurrencyLevel(8)
.expiration(20,TimeUnit.SECONDS)
.makeMap();
とすれば、mapに格納したものは、20秒で消滅、複数スレッド同時アクセス制限=8
makeMap() makeComputingMap() が、ConcurrentMap<K,V> を返すが、
concurrencyLevel、expiration、softKeys、weakKeys などは MapMaker を返す。
ソフト参照 softKeys() softValues() を付与すれば、
ConcurrentMap<String,String> map = new MapMaker()
.concurrencyLevel(8)
.softKeys()
.softValues()
.makeMap();
これはソフト参照でGCが削除してくれる。