package demo.mytest;

import java.io.Serializable;
import java.util.LinkedHashMap;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

public class LRUCache<K,V> extends LinkedHashMap<K, V> implements Serializable {
/**
* 缓存默认大小
*/
public static final int DEFAULT_CAPASITY = 20;
/**
* 缓存实际大小
*/
public static int CACHE_CAPASITY = DEFAULT_CAPASITY;
/**
* 线程同步锁
*/
private static final Lock lock=new ReentrantLock();
public LRUCache(){
super(DEFAULT_CAPASITY);
CACHE_CAPASITY = DEFAULT_CAPASITY;
}
public LRUCache(int size){
super(size);
CACHE_CAPASITY=size;
}
/**
* 清理缓存.
*/
@Override
public void clear() {
try{
lock.lock();
super.clear();
}finally{
lock.unlock();
}

}
/**
* 是否包含
*/
@Override
public boolean containsKey(Object key) {
try{
lock.lock();
return super.containsKey(key);
}finally{
lock.unlock();
}
}
/**
* 获取缓存对象.
*/
@Override
public V get(Object key) {
try{
lock.lock();
return super.get(key);
}finally{
lock.unlock();
}
}
/*
* 是否删除最早未使用缓存对象
*
*/
@Override
protected boolean removeEldestEntry(java.util.Map.Entry<K, V> eldest) {
try {
lock.lock();
return this.size() > CACHE_CAPASITY;
} finally {
lock.unlock();
}
}
/*
* 判断缓存是否为空
*
* @see java.util.HashMap#isEmpty()
*/
@Override
public boolean isEmpty() {
try {
lock.lock();
return super.isEmpty();
} finally {
lock.unlock();
}
}
/*
* 放入缓存
*
* @see java.util.HashMap#put(java.lang.Object, java.lang.Object)
*/
@Override
public V put(K key, V value) {
try {
lock.lock();
return super.put(key, value);
} finally {
lock.unlock();
}
}
/*
* 从缓存中删除
*
* @see java.util.HashMap#remove(java.lang.Object)
*/
@Override
public V remove(Object key) {
try {
lock.lock();
return super.remove(key);
} finally {
lock.unlock();
}
}
/*
* 缓存大小
*
* @see java.util.HashMap#size()
*/
@Override
public int size() {
try {
lock.lock();
return super.size();
} finally {
lock.unlock();
}
}
}

lru缓存测试类的更多相关文章

  1. LRU缓存实现(Java)

    LRU Cache的LinkedHashMap实现 LRU Cache的链表+HashMap实现 LinkedHashMap的FIFO实现 调用示例 LRU是Least Recently Used 的 ...

  2. 如何用LinkedHashMap实现LRU缓存算法

    阿里巴巴笔试考到了LRU,一激动忘了怎么回事了..准备不充分啊.. 缓存这个东西就是为了提高运行速度的,由于缓存是在寸土寸金的内存里面,不是在硬盘里面,所以容量是很有限的.LRU这个算法就是把最近一次 ...

  3. [转]LRU缓存实现(Java)

    LRU Cache的LinkedHashMap实现 LRU Cache的链表+HashMap实现 LinkedHashMap的FIFO实现 调用示例 LRU是Least Recently Used 的 ...

  4. 阿里面试官让我实现一个线程安全并且可以设置过期时间的LRU缓存,我蒙了!

    目录 1. LRU 缓存介绍 2. ConcurrentLinkedQueue简单介绍 3. ReadWriteLock简单介绍 4.ScheduledExecutorService 简单介绍 5. ...

  5. LRU缓存的实现

    文章目录 LRU简介 LRU算法分析 实现代码 节点类 双向链表 LRUCache类 测试类 总结 LRU简介 LRU是"Least Recently Used"的简写,意思是最近 ...

  6. 利用Spring.Net技术打造可切换的分布式缓存读写类

    利用Spring.Net技术打造可切换的Memcached分布式缓存读写类 Memcached是一个高性能的分布式内存对象缓存系统,因为工作在内存,读写速率比数据库高的不是一般的多,和Radis一样具 ...

  7. 转: LRU缓存介绍与实现 (Java)

    引子: 我们平时总会有一个电话本记录所有朋友的电话,但是,如果有朋友经常联系,那些朋友的电话号码不用翻电话本我们也能记住,但是,如果长时间没有联系了,要再次联系那位朋友的时候,我们又不得不求助电话本, ...

  8. volley三种基本请求图片的方式与Lru的基本使用:正常的加载+含有Lru缓存的加载+Volley控件networkImageview的使用

    首先做出全局的请求队列 package com.qg.lizhanqi.myvolleydemo; import android.app.Application; import com.android ...

  9. LinkedHashMap实现LRU缓存算法

    LinkedHashMap的get()方法除了返回元素之外还可以把被访问的元素放到链表的底端,这样一来每次顶端的元素就是remove的元素. 构造函数如下: public LinkedHashMap  ...

随机推荐

  1. builtin_shaders-5.3.4f1学习-Sprites-Default

    Shader "Sprites/Default" { Properties { [PerRendererData] _MainTex ("Sprite Texture&q ...

  2. IT兄弟连 JavaWeb教程 JSP内置对象经典面试题

    1.请说明cookie.request.session.application的作用域和声明周期? 并说明它们适用与什么场景? request的生命周期是一次请求.可以用于JSP表单提交数据. ses ...

  3. 【OpenJ_Bailian - 2797】最短前缀(贪心)

    最短前缀 Descriptions: 一个字符串的前缀是从该字符串的第一个字符起始的一个子串.例如 "carbon"的字串是: "c", "ca&qu ...

  4. JS与JQ的对比与提高

    来吧, 案例1:先上个例子js写的省市二级联动 <!DOCTYPE html><html> <head> <meta charset="UTF-8& ...

  5. 五粮液【线段树】By cellur925

    题目传送门 考场上感觉的确是线段树,还要维护区间最值...最值怎么维护?还要区间修改?\(update\)的时候加一下就好了吧...之后怎么搞啊?\(qwqwq\)之后好像不太会了...果断删除几乎快 ...

  6. 关于Dictionary的优化用法

    今天突然想到了解一下Dictionary,于是在博客园上看到了一篇关于用TryGetValue的文章,原来用TryGetValue要比用ContainsKey更快,快一倍.

  7. tinymce 富文本简单使用

    tinymce.init({ //选择器 selector:'textarea', //配置顶部的菜单栏显示隐藏 menubar: false, //配置中文(默认没有中文包,需要到官网下载,放到la ...

  8. Jquery | 外部插入节点

    after(content) : //在 span 元素外部的后面 插入 "<span><b>Write Less Do More</b><span ...

  9. 牛客寒假6-E.海啸

    链接:https://ac.nowcoder.com/acm/contest/332/E 题意: 有一个沿海地区,可以看作有n行m列的城市,第i行第j列的城市海拔为h[i][j]. 由于沿海,所以这个 ...

  10. 【aspnetcore】在asp.net core中配置使用AutoMapper

    网上使用AutoMapper的文章很多,就不多说了.这里主要记录一下怎么在项目中配置和使用. 首先是从NuGet获取AutoMapper. 在Startup.cs文件中注册AutoMapper服务 p ...