iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Java单例模式怎么利用HashMap实现缓存数据
  • 370
分享到

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

2023-06-30 08:06:57 370人浏览 薄情痞子
摘要

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

本文小编为大家详细介绍“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实现缓存数据”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网精选频道。

--结束END--

本文标题: Java单例模式怎么利用HashMap实现缓存数据

本文链接: https://www.lsjlt.com/news/327818.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java单例模式利用HashMap实现缓存数据
    本文实例为大家分享了Java单例模式利用HashMap实现缓存数据的具体代码,供大家参考,具体内容如下 一、单例模式是什么? 单例模式是一种对象创建模式,它用于产生一个对象的具体实例...
    99+
    2024-04-02
  • Java单例模式怎么利用HashMap实现缓存数据
    本文小编为大家详细介绍“Java单例模式怎么利用HashMap实现缓存数据”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java单例模式怎么利用HashMap实现缓存数据”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知...
    99+
    2023-06-30
  • 基于Java利用static实现单例模式
    目录一、之前旧的写法二、static代码块的效果三、单例的另一种写法四、总结一、之前旧的写法 class Singleton{     private Singleton() {} ...
    99+
    2024-04-02
  • java单例模式怎么实现
    Java中单例模式的实现方法有以下几种:1. 懒汉式(线程不安全):```public class Singleton {priva...
    99+
    2023-08-23
    java
  • java的单例模式怎么实现
    今天小编给大家分享一下java的单例模式怎么实现的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下...
    99+
    2024-04-02
  • Java中静态内部类怎么利用单例模式实现
    本篇文章为大家展示了Java中静态内部类怎么利用单例模式实现,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Singleton是众多设计模式中最容易理解的一种,也是众多设计模式中较为重要的一种设计模式...
    99+
    2023-05-31
    java ava
  • java设计模式之怎么实现单例模式
    这篇文章主要介绍了java设计模式之怎么实现单例模式的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇java设计模式之怎么实现单例模式文章都会有所收获,下面我们一起来看看吧。单元素的枚举类型经常成为实现 Sing...
    99+
    2023-07-04
  • java怎么实现一个单例模式
    在Java中,可以通过以下两种方式来实现单例模式:1. 懒汉式单例模式(Lazy Initialization):```javapu...
    99+
    2023-09-27
    java
  • 怎么使用java枚举实现单例模式
    这篇文章主要介绍了怎么使用java枚举实现单例模式的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么使用java枚举实现单例模式文章都会有所收获,下面我们一起来看看吧。用法说明:在功能上类似于 public 字...
    99+
    2023-07-04
  • java单例模式实现代码怎么写
    在Java中实现单例模式有多种方式,以下是其中几种常用的实现方式: 饿汉式(线程安全): public class Single...
    99+
    2023-10-24
    java
  • Singleton单例模式怎么实现
    这篇“Singleton单例模式怎么实现”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Si...
    99+
    2024-04-02
  • C++怎么实现单例模式
    本篇内容介绍了“C++怎么实现单例模式”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!多线程环境下的单例模式Instance方法是这样实现的:...
    99+
    2023-06-19
  • Java中单例模式怎么用
    这篇文章给大家分享的是有关Java中单例模式怎么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。注意单例类只能有一个实例。单例类必须自己创建自己的唯一实例。单例类必须给所有其他对象提供这一实例。优点在内存里只有一...
    99+
    2023-06-29
  • android单例模式怎么实现
    在Android中,可以通过以下几种方式实现单例模式:1. 懒汉式```javapublic class Singleton {pr...
    99+
    2023-08-23
    android
  • golang单例模式怎么实现
    Go语言中的单例模式可以通过以下几种方式来实现: 使用全局变量:定义一个全局变量,在需要使用单例对象的地方直接使用该全局变量。在包...
    99+
    2023-10-21
    golang
  • php单例模式怎么实现
    PHP单例模式可以通过以下步骤实现:1. 创建一个类,并将构造函数设为私有,以防止外部直接实例化该类。2. 在类内部创建一个静态私有...
    99+
    2023-09-29
    php
  • SpringBoot2 中怎么利用Redis数据库实现缓存管理
    SpringBoot2 中怎么利用Redis数据库实现缓存管理,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。一、Redis简介Spring Boot中除了对常用...
    99+
    2023-06-02
  • 使用java怎么实现一个饿汉模式单例
    今天就跟大家聊聊有关使用java怎么实现一个饿汉模式单例,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。常用的java框架有哪些1.SpringMVC,Spring Web MVC是一...
    99+
    2023-06-14
  • 怎样用Javascript实现单例模式
    目录概述代码实现简单版单例模式改良版代理版单例模式惰性单例模式概述 单例模式也称为单体模式,规定一个类只有一个实例,并且提供可全局访问点; 在读这篇文章之前,也许你对单例模式的概念感...
    99+
    2024-04-02
  • java静态类中缓存数据怎么实现
    在Java中,可以使用静态变量来实现数据的缓存。静态变量是与类关联的变量,它们在整个应用程序的生命周期内都保持不变,并且可以被所有类...
    99+
    2023-10-27
    java
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作