java单例模式利用hashmap实现缓存数据-亚博电竞手机版

本文实例为大家分享了java单例模式利用hashmap实现缓存数据的具体代码,供大家参考,具体内容如下

一、单例模式是什么?

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

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

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

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

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

1.测试结果

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 cachesingletonmap; public static final string people_list_key = "peoplelist"; private cachesingletonutil(){ cachesingletonmap = new hashmap(); } /* * 单例模式有两种类型 * 懒汉式:在真正需要使用对象时才去创建该单例类对象 * 饿汉式:在类加载时已经创建好该单例对象,等待被程序使用 */ // 懒汉式单例模式 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("第一次查询结束nwwecbie"); system.out.println("============="); system.out.println("第二次查询开始"); query(); system.out.println("第二次查询结束"); } /* * 查询数据 */ private static list query() { list peoplelist = null; list cachedata = (list) cachesingletonutil.getinstance().getcachedata(cachesingletonutil.people_list_key); if (collectionutils.isnotempty(cachedata)) { system.out.println("从内存中读取"); peoplelist = cachedata; } else { system.out.println("从数据库中读取"); peoplelist = getdata(); // 添加到内存中 http://www.cppcns.com 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 getdata() { people p1 = new people(); p1.setname("jack"); p1.setage(25); people p2 = new people(); p2.setname("brown"); p2.setage(28); list peoplelist = new arraylist<>(); peoplelist.add(p1); peoplelist.add(p2); return peoplelist; } }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

展开全文
内容来源于互联网和用户投稿,文章中一旦含有亚博电竞手机版的联系方式务必识别真假,本站仅做信息展示不承担任何相关责任,如有侵权或涉及法律问题请联系亚博电竞手机版删除

最新文章

网站地图