文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Java单例模式怎么利用HashMap实现缓存数据

2023-06-30 08:15

关注

本文小编为大家详细介绍“Java单例模式怎么利用HashMap实现缓存数据”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java单例模式怎么利用HashMap实现缓存数据”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

一、单例模式是什么?

单例模式是一种对象创建模式,它用于产生一个对象的具体实例,它可以确保系统中一个类只产生一个实例。Java 里面实现的单例是一个虚拟机的范围,因为装载类的功能是虚拟机的,所以一个虚拟机在通过自己的 ClassLoad 装载实现单例类的时候就会创建一个类的实例。在 Java 语言中,这样的行为能带来两大好处:

对于频繁使用的对象,可以省略创建对象所花费的时间,这对于那些重量级对象而言,是非常可观的一笔系统开销;

由于 new 操作的次数减少,因而对系统内存的使用频率也会降低,这将减轻 GC 压力,缩短 GC 停顿时间。

因此对于系统的关键组件和被频繁使用的对象,使用单例模式可以有效地改善系统的性能。单例模式的核心在于通过一个接口返回唯一的对象实例。首要的问题就是要把创建实例的权限收回来,让类自身来负责自己类的实例的创建工作,然后由这个类来提供外部可以访问这个类实例的方法

二、单例模式结合HashMap实现缓存

1.测试结果

Java单例模式怎么利用HashMap实现缓存数据

2.代码如下

JavaBean

public class People {    private String name;    private int age;    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public int getAge() {        return age;    }    public void setAge(int age) {        this.age = age;    }    @Override    public String toString() {        return "People{" +                "name='" + name + '\'' +                ", age=" + age +                '}';    }}

缓存工具类

import java.util.HashMap;import java.util.Map;public class CacheSingletonUtil {    private static volatile CacheSingletonUtil cacheSingletonUtil;    private static Map<String,Object> cacheSingletonMap;    public static final String PEOPLE_LIST_KEY = "peopleList";    private CacheSingletonUtil(){        cacheSingletonMap = new HashMap<String, Object>();    }        // 懒汉式单例模式    public static CacheSingletonUtil getInstance(){        if (cacheSingletonUtil == null){// 线程A和线程B同时看到cacheSingletonUtil = null,如果不为null,则直接返回cacheSingletonUtil            synchronized (CacheSingletonUtil.class) {// 线程A或线程B获得该锁进行初始化                if (cacheSingletonUtil == null) {// 其中一个线程进入该分支,另外一个线程则不会进入该分支                    cacheSingletonUtil = new CacheSingletonUtil();                }            }        }        return cacheSingletonUtil;    }        public void addCacheData(String key,Object obj){        cacheSingletonMap.put(key,obj);    }        public Object getCacheData(String key){        return cacheSingletonMap.get(key);    }        public void removeCacheData(String key){        cacheSingletonMap.remove(key);    }}

测试类

import org.apache.commons.collections.CollectionUtils;import java.util.ArrayList;import java.util.List;public class CacheSingletonTest {    public static void main(String[] args) {        //测试查询        testQuery();    }    private static void testQuery () {        System.out.println("第一次查询开始");        query();        System.out.println("第一次查询结束");        System.out.println("=============");        System.out.println("第二次查询开始");        query();        System.out.println("第二次查询结束");    }        private static List<People> query() {        List<People> peopleList = null;        List<People> cacheData = (List<People>) CacheSingletonUtil.getInstance().getCacheData(CacheSingletonUtil.PEOPLE_LIST_KEY);        if (CollectionUtils.isNotEmpty(cacheData)) {            System.out.println("从内存中读取");            peopleList = cacheData;        } else {            System.out.println("从数据库中读取");            peopleList = getData();            // 添加到内存中            CacheSingletonUtil.getInstance().addCacheData(CacheSingletonUtil.PEOPLE_LIST_KEY, peopleList);        }        for (People people : peopleList) {            System.out.println("name : " + people.getName() + " age : " + people.getAge());        }        return peopleList;    }        private void deleteCache () {        CacheSingletonUtil.getInstance().removeCacheData(CacheSingletonUtil.PEOPLE_LIST_KEY);    }    private static List<People> getData() {        People p1 = new People();        p1.setName("Jack");        p1.setAge(25);        People p2 = new People();        p2.setName("Brown");        p2.setAge(28);        List<People> peopleList = new ArrayList<>();        peopleList.add(p1);        peopleList.add(p2);        return peopleList;    }}

读到这里,这篇“Java单例模式怎么利用HashMap实现缓存数据”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网行业资讯频道。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯