[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() {}@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相关推荐
- Java 并发实践 — ConcurrentHashMap 与 CAS
转载自 Java 并发实践 - ConcurrentHashMap 与 CAS 最近在做接口限流时涉及到了一个有意思问题,牵扯出了关于concurrentHashMap的一些用法,以及CAS的一些概念 ...
- Java简单实现本地缓存
Java简单实现本地缓存 注意:此代码不适合集群部署环境 import java.util.Map; import java.util.concurrent.ConcurrentHashMap;/** ...
- python比java简单好学-python和java哪个学起来更简单
在近几年Python的呼声越来越高,很多刚开始起步想要学习编程的朋友都会犹豫要不要选择学习Python,毕竟作为人工智能时代的首选语言这个诱惑还是很大的.在选择上最纠结的就是Python和Java选择 ...
- java简单工厂模式_Java 简单工厂模式
Java 简单工厂模式 2014-05-28·WeaponX 3717 次浏览 ## 介绍 简单工厂模式又称静态工厂模式. 简单工厂模式由工厂类角色.抽象产品角色和具体产品角色组成. 工厂类角色是本模 ...
- java拳皇地下城_拳皇(Java简单的小程序)代码实例
刚开始学习Java,看完老九君的视频根据他的内容敲的代码,感觉还挺有成就感的,毕竟刚学习Java. package helloasd;import java.util.*; public class ...
- java简单系统_Java简单学生管理系统
Java简单学生管理系统 这个不需要手动输入,笔记记录 //student` public class student(){ private String id;//学号 private String ...
- JAVA拳皇_拳皇(Java简单的小程序)代码实例|chu
刚开始学习Java,看完老九君的视频根据他的内容敲的代码,感觉还挺有成就感的,毕竟刚学习Java. package helloasd;import java.util.*; public class ...
- java 简单获取Excel表格内容(初学者)
java 简单获取Excel表格内容(初学者) 代码: package cn.ccaih.read;import org.apache.poi.ss.usermodel.Cell; import or ...
- java简单词法分析器(源码下载)
java简单词法分析器 : http://files.cnblogs.com/files/hujunzheng/%E7%AE%80%E5%8D%95%E8%AF%8D%E6%B3%95%E5%88%8 ...
- java简单密码验证程序
java简单密码验证程序 package demo01;import java.util.Scanner;/*** java模拟密码验证问题* 从键盘上录入6位密码,验证密码是不是6位,如果不是6位提 ...
最新文章
- TensorFlow练习16: 根据大脸判断性别和年龄
- 【转】java线程系列---Runnable和Thread的区别
- [ JS 进阶 ] Ajax 详解 (2) :XHR 实例 GET 和 POST 异步和同步
- 清华大学车辆刚才专业大佬教你如何写SCI论文(转)
- 别指望在NativeWindow里添加Flex组件
- [原创]Flex文本框自动提示(AutoSuggest)、自动完成(AutoComplete)
- 为什么不能在中断上半部休眠?
- Android Studio小技巧
- linux 80中断,在64位Linux上使用中断0x80
- sqlserver备份后无法还原的解决方法
- 卡拉OK歌词同步播放
- asp 读取 json 数据
- 读《财务就是IT 企业财务信息系统》
- 海量数据处理 算法总结
- excel合并两列内容_【238期】EXCEL扩展思维,一题多解,玩转数据两列合并,你都会?...
- 一张图让你掌握测试人员能力模型及研发测试流程规范
- 动态监控网卡流量异常
- 文心一言,被网友玩坏了哈哈哈哈哈哈哈
- ventoy启动盘 集成多版本系统的启动盘
- (附源码)SSM兴澜幼儿园管理系统JAVA计算机毕业设计项目
热门文章
- 理解和使用 Unity UI 系统(canvas和CanvasScaler )
- python3.4 or 3.x xlwt replaced with xlwt-future
- Verilog 初学笔记--顺序操作 和 并行操作的一点思考(参考黑金教程:Verilog HDL那些事 建模篇)...
- 关于“undefined reference to”错误
- 在开发时选择静态方法还是非静态方法
- man services时“没有services的手册页条目”→Centos 安装man帮助文档包
- python实验室公众号_区块链研究实验室 | 使用Python编写Tendermint应用程序
- 结构化数据传输协议xml、json、protobuf比较
- 捷克论坛 最新ip_巧说:论坛外链如何正确的建设发布『 不易删』
- 业务流程图6个图例_系统流程图用什么软件做?流程图绘制全教程