zoukankan      html  css  js  c++  java
  • [java] 简单的ConcurrentHashMap

    ConcurrentMap和Guava的LocalCache实现原理相近,底层的存储方式使用的时table方式来存储。这里使用最简单且最暴力的方式,在每次访问的时候均加锁。

    ConcurrentHashMap接口:

    public interface ConcurrentHashMap<K, V> {
    
        public V get(K k);
    
        public void put(K key, V value);
    
        public void putAll(Iterable<MapEntry<K, V>> kIterator);
    
        public V remove(K k);
    }
    

      MapEntry:

    public class MapEntry<K, V> {
    
        private K key;
    
        private V value;
    
        public K getKey() {
            return key;
        }
    
        public void setKey(K key) {
            this.key = key;
        }
    
        public V getValue() {
            return value;
        }
    
        public void setValue(V value) {
            this.value = value;
        }
    }
    

      SimpleConcurrentHashMap接口:

    import com.google.common.base.Preconditions;
    import com.google.common.collect.Maps;
    
    import java.util.HashMap;
    import java.util.Iterator;
    
    public class SimpleConcurrentHashMap<K, V> implements ConcurrentHashMap<K, V> {
    
        private final HashMap<K, V> cache = Maps.newHashMap();
    
        public SimpleConcurrentHashMap() {
        }
    
        @Override
        public V get(K k) {
            Preconditions.checkNotNull(k);
            synchronized (cache) {
                return cache.get(k);
            }
        }
    
        @Override
        public void put(K key, V value) {
            Preconditions.checkNotNull(key);
            Preconditions.checkNotNull(value);
            synchronized (cache) {
                cache.put(key, value);
            }
        }
    
        @Override
        public void putAll(Iterable<MapEntry<K, V>> entryIterable) {
            Preconditions.checkNotNull(entryIterable);
            Iterator<MapEntry<K, V>> iterator = entryIterable.iterator();
            while (iterator.hasNext()) {
                MapEntry<K, V> next = iterator.next();
                this.put(next.getKey(), next.getValue());
            }
        }
    
        @Override
        public V remove(K k) {
            Preconditions.checkNotNull(k);
            synchronized (cache) {
                return cache.remove(k);
            }
        }
    }
    

      

  • 相关阅读:
    占位
    提高班整风带给我的思考
    Servlet笔记
    CommandArgument传多个值
    asp.net中怎么判断request的一个值是否为空
    asp.net中cookie中文乱码的解决
    datatable的手工构造过程
    .net c#日期时间函数大全
    【转载】[.net程序员面试题]
    javascript自动生成表格行
  • 原文地址:https://www.cnblogs.com/life91/p/4676626.html
Copyright © 2011-2022 走看看