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() {}@Overridepublic V get(K k) {Preconditions.checkNotNull(k);synchronized (cache) {return cache.get(k);}}@Overridepublic void put(K key, V value) {Preconditions.checkNotNull(key);Preconditions.checkNotNull(value);synchronized (cache) {cache.put(key, value);}}@Overridepublic 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());}}@Overridepublic V remove(K k) {Preconditions.checkNotNull(k);synchronized (cache) {return cache.remove(k);}}
}

  

转载于:https://www.cnblogs.com/life91/p/4676626.html

[java] 简单的ConcurrentHashMap相关推荐

  1. Java 并发实践 — ConcurrentHashMap 与 CAS

    转载自 Java 并发实践 - ConcurrentHashMap 与 CAS 最近在做接口限流时涉及到了一个有意思问题,牵扯出了关于concurrentHashMap的一些用法,以及CAS的一些概念 ...

  2. Java简单实现本地缓存

    Java简单实现本地缓存 注意:此代码不适合集群部署环境 import java.util.Map; import java.util.concurrent.ConcurrentHashMap;/** ...

  3. python比java简单好学-python和java哪个学起来更简单

    在近几年Python的呼声越来越高,很多刚开始起步想要学习编程的朋友都会犹豫要不要选择学习Python,毕竟作为人工智能时代的首选语言这个诱惑还是很大的.在选择上最纠结的就是Python和Java选择 ...

  4. java简单工厂模式_Java 简单工厂模式

    Java 简单工厂模式 2014-05-28·WeaponX 3717 次浏览 ## 介绍 简单工厂模式又称静态工厂模式. 简单工厂模式由工厂类角色.抽象产品角色和具体产品角色组成. 工厂类角色是本模 ...

  5. java拳皇地下城_拳皇(Java简单的小程序)代码实例

    刚开始学习Java,看完老九君的视频根据他的内容敲的代码,感觉还挺有成就感的,毕竟刚学习Java. package helloasd;import java.util.*; public class ...

  6. java简单系统_Java简单学生管理系统

    Java简单学生管理系统 这个不需要手动输入,笔记记录 //student` public class student(){ private String id;//学号 private String ...

  7. JAVA拳皇_拳皇(Java简单的小程序)代码实例|chu

    刚开始学习Java,看完老九君的视频根据他的内容敲的代码,感觉还挺有成就感的,毕竟刚学习Java. package helloasd;import java.util.*; public class ...

  8. java 简单获取Excel表格内容(初学者)

    java 简单获取Excel表格内容(初学者) 代码: package cn.ccaih.read;import org.apache.poi.ss.usermodel.Cell; import or ...

  9. java简单词法分析器(源码下载)

    java简单词法分析器 : http://files.cnblogs.com/files/hujunzheng/%E7%AE%80%E5%8D%95%E8%AF%8D%E6%B3%95%E5%88%8 ...

  10. java简单密码验证程序

    java简单密码验证程序 package demo01;import java.util.Scanner;/*** java模拟密码验证问题* 从键盘上录入6位密码,验证密码是不是6位,如果不是6位提 ...

最新文章

  1. TensorFlow练习16: 根据大脸判断性别和年龄
  2. 【转】java线程系列---Runnable和Thread的区别
  3. [ JS 进阶 ] Ajax 详解 (2) :XHR 实例 GET 和 POST 异步和同步
  4. 清华大学车辆刚才专业大佬教你如何写SCI论文(转)
  5. 别指望在NativeWindow里添加Flex组件
  6. [原创]Flex文本框自动提示(AutoSuggest)、自动完成(AutoComplete)
  7. 为什么不能在中断上半部休眠?
  8. Android Studio小技巧
  9. linux 80中断,在64位Linux上使用中断0x80
  10. sqlserver备份后无法还原的解决方法
  11. 卡拉OK歌词同步播放
  12. asp 读取 json 数据
  13. 读《财务就是IT 企业财务信息系统》
  14. 海量数据处理 算法总结
  15. excel合并两列内容_【238期】EXCEL扩展思维,一题多解,玩转数据两列合并,你都会?...
  16. 一张图让你掌握测试人员能力模型及研发测试流程规范
  17. 动态监控网卡流量异常
  18. 文心一言,被网友玩坏了哈哈哈哈哈哈哈
  19. ventoy启动盘 集成多版本系统的启动盘
  20. (附源码)SSM兴澜幼儿园管理系统JAVA计算机毕业设计项目

热门文章

  1. 理解和使用 Unity UI 系统(canvas和CanvasScaler )
  2. python3.4 or 3.x xlwt replaced with xlwt-future
  3. Verilog 初学笔记--顺序操作 和 并行操作的一点思考(参考黑金教程:Verilog HDL那些事 建模篇)...
  4. 关于“undefined reference to”错误
  5. 在开发时选择静态方法还是非静态方法
  6. man services时“没有services的手册页条目”→Centos 安装man帮助文档包
  7. python实验室公众号_区块链研究实验室 | 使用Python编写Tendermint应用程序
  8. 结构化数据传输协议xml、json、protobuf比较
  9. 捷克论坛 最新ip_巧说:论坛外链如何正确的建设发布『 不易删』
  10. 业务流程图6个图例_系统流程图用什么软件做?流程图绘制全教程